2012-10-08 72 views
0

我有兩個表,如A和B.表A具有列名稱。表B具有列公司名稱。如何將sql結果寫入csv文件

這是我的代碼:

$query1 = "SELECT Name FROM A"; 
$query2 = "SELECT Company Name FROM B"; 

$statement1 = $connection->prepare($query1);  
$statement2 = $connection->prepare($query2); 

$statement1->execute(); 
$statement2>execute(); 

while (($name) = $statement->fetchrow_array) { 
    push (@Name, $name);  
} 
while (($companyname) = $statement->fetchrow_array) { 
    push (@companyName, $companyname); 
} 

open (FH, ">>Output.csv") or die "$!"; 

我需要寫在CSV文件中的數據是這樣

Name CompanyName 

xxx  yyyy 

xxx  yyyy 

xxx  yyyy 

xxx  yyyy 

xxx  yyyy 
+0

你應該總是'使用strict'和'使用warnings',並用'my'聲明變量。目前還不清楚你的問題是什麼。是否有錯誤訊息? – simbabque

+0

好了,以後我會使用strict和warning.I需要將數據寫入csv文件。 –

+0

請發佈有問題的文件,或至少測試複製您環境的文件。當我們有一些數據可以玩時,它更容易回答。 – slayedbylucifer

回答

1

你可以做到這一點與在SQL查詢JOIN。你不需要做兩個SELECT報表。

'SELECT a.Name, b.CompanyName FROM A a JOIN B b ON a.MailId = b.MailId' 

這裏有一個完整的例子:

#!/usr/bin/perl 
use strict; use warnings; 
use DBI; 

my $dbh = DBI->connect("put:dsn:here"); 
my $sth = $dbh->prepare('SELECT a.Name, b.CompanyName FROM A a JOIN B b ON a.MailId = b.MailId'); 

open my $fh, '>>', 'Output.csv' or die "Could not open file Output.csv: $!"; 
print $fh qq{Name\tCompanyName\n}; 

$sth->execute; 
while (my $res = $sth->fetchrow_hashref) { 
    print $fh qq{$res->{'Name'}\t$res->{'CompanyName'}\n}; 
} 
close $fh; 
+0

我有兩個疑問。第一個查詢結果應寫入一列中。第二個查詢結果應寫在下一列 –

+0

這是我的要求 –

+0

!Stefan Edwards:你確定?您確定名稱和公司名稱是按照一致的順序列出的嗎?通常你不是,你會加入以配合他們。 – reinierpost