Here's a fun and slightly obfuscated method to do that:
my $usql=q{select username from dba_users}; my $aryRef = $dbh->selectall_arrayref($usql); my @users = map { $aryRef->[$_][0] } 0..$#{$aryRef}; my $newSql = q{select from users where username in ('} . join(q{','},@users) . q{')}; print "$newSql\n"; Jared On Wed, 2005-05-25 at 11:39, [EMAIL PROTECTED] wrote: > Hello dbi-users, > I'm relatively new to Perl DBI so bear with me as this might be very > simple for the gurus. > > I would like to use the results of a query as an input to another query's > WHERE ... IN clause. This is simple enough but I can't figure out how to > avoid extracting and formatting each row from the first query results. > That is, how can I avoid doing something tedious like this: > > # ***** BEGIN EXAMPLE ************ > my $sql1 = qq{SELECT ....}; > my $sth1 = $dbh->prepare($sql1); > $sth1->execute(); > > my @results; > while ( my @row1 = $sth1->fetchrow_array ) { > push(@results, "\'" . @row1[0] . "\'"); > } > > my $resultsformatted=join(",",@results); > > my $sql2 = qq{SELECT * FROM ... WHERE ... IN ($resultsformatted)}; > # ***** END EXAMPLE ************ > > I tried "selectall_arrayref" but it doesn't help me since there is a > reference to each item in the array. > > I tried "dump_results" but the output contains an extra row that gives the > number of rows dumped, hence the results can't be used in the second > query. > > What I really want is a "neat_list" but I can't figure out how to assign > the results of the first query to an array that I can then pass to > "neat_list". > > Something similar is possible in R/Splus using ODBC, the results of a > query can assigned to a data frame without accessing each row. How can I > do the same using Perl DBI? > > Thanks in advance. > > Daniel Ricard >