DBD::SQLite On 2010/11/17 13:17, ZHANG Jiaqiang A wrote: > 多谢 cnhack TNT。我到cpan上面给DBD CSV开了个ticket确认一下。 > 另外,我之所以用csv就是觉得比较方便,原始内容在xml里 面,用perl解析出 > couple和people的内容后直接放在CSV文件里,就可以用SQL访问其中的数据了。 > 也不 用安装任何数据库软件。 > 不知道除此之外,有没有更简易高效的类似解决方案。 > 内存数据库是不是都需要安装相应的软件才可以?是否有推荐的, 免费的 ? > ------------------------------------------------------------------------ > *From:* [email protected] [mailto:[email protected]] > *On Behalf Of *cnhack TNT > *Sent:* 2010年11月17日 10:45 > *To:* [email protected] > *Subject:* Re: [PerlChina] CSV的SQL语句中一张表不能出现两次 > > 通过表内自连是可以的: > > SELECT c.husband, > p1.age, > c.wife, > p2.age > FROM couple c, > people p1, > people p2 > WHERE c.husband = p1.name > AND c.wife = p2.name; > > 但是 DBD::CSV 对自连似乎支持不好,如果你复制一份 people.csv 为 > people2.csv, 然后改SQL语句为: > > SELECT c.husband, > p1.age, > c.wife, > p2.age > FROM couple c, > people p1, > people2 p2 > WHERE c.husband = p1.name > AND c.wife = p2.name > > 也是可以的。 > > > 2010/11/17 ZHANG Jiaqiang A <[email protected] > <mailto:[email protected]>> > > 我想一条语句把老公和老婆的年龄一起读出来,我的想 像中,SQL的输 > 出应该如下: > c.husband |h.age |c.wife |w.age | > ================================================ > James |30 |Mary |22 | > Roger |24 |Lily |26 | > ================================================ > 下面是可用的测试代码:(附件里面有测试文件,放到 和脚本一起的 > 目录应该就可以用) > #!/usr/bin/perl -w > use strict; > use DBI; > my $dbh = DBI->connect ("dbi:CSV:", "", "", { > f_ext => ".csv", > csv_null => 1, > FetchHashKeyName => 'NAME_lc', > }); > > my $query = "select c.husband,h.age,c.wife,w.age from couple > c, people h, people w where c.husband = h.name <http://h.name> > and c.wife = w.name <http://w.name>"; > #my $query = "select c.husband,h.age from couple c, people h > where c.husband = h.name <http://h.name> "; > my $sth = $dbh->prepare ($query); > $sth->execute (); > while (my $row = $sth->fetchrow_hashref) { > foreach my $col ( keys %$row ) { > print $col,"=",$row->{$col},"\t" if defined $row->{$col}; > } > print "done\n\n"; > } > $sth->finish (); > > > ------------------------------------------------------------------------ > *From:* [email protected] > <mailto:[email protected]> > [mailto:[email protected] > <mailto:[email protected]>] *On Behalf Of *cnhack TNT > *Sent:* 2010年11月17日 9:41 > *To:* [email protected] > <mailto:[email protected]> > *Subject:* Re: [PerlChina] CSV的SQL语句中一张表不能出现两次 > > 为啥要 “people h, people w” ? > > 2010/11/17 ZHANG Jiaqiang A > <[email protected] > <mailto:[email protected]>> > > 大家好, > 有一张 表,我需要多次关联,设了不同的别名,但是执行SQL > 的时候报错,大家有用过DBD-CSV 的高手,帮我看看这是 > DBDCSV的限制还是SQL写的不对 > SQL 语句: > select c.husband,h.age,c.wife,w.age from couple c, > people h, people w where c.husband = h.name > <http://h.name> and c.wife = w.name <http://w.name>; > 报 错信息: > DBD::CSV::st execute failed: Error 2012 while reading > file D:\Perl\people.csv: E > OF - End of data in parsing input stream at > C:/strawberry/perl/site/lib/SQL/Stat > ement.pm <http://ement.pm> line 813 > [for Statement "select c.husband,h.age,c.wife,w.age > from couple c, people h, pe > ople w where c.husband = h.name <http://h.name> and > c.wife = w.name <http://w.name>"] at csv.pl > <http://csv.pl> line 99. > > 以 下SQL语句都可以正常执行: > select * from couple; > > husband |wife | > ======================== > James |Mary | > Roger |Lily | > ======================== > Return 2 columns and 2 lines > select * from people; > name |age | > ======================== > Mary |22 | > Lily |26 | > Roger |24 | > James |30 | > ======================== > Return 2 columns and 4 lines > select c.husband,h.age from couple c, people h > where c.husband = h.name <http://h.name>; > > c.husband |h.age | > ======================== > James |30 | > Roger |24 | > ======================== > Return 2 columns and 2 lines > select c.wife,w.age from couple c, people w where > c.wife = w.name <http://w.name>; > c.wife |w.age | > ======================== > Mary |22 | > Lily |26 | > ======================== > Return 2 columns and 2 lines > > 祝好 > 家强 > -- > 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina > Mongers 讨论组”论坛。 > 要向此网上论坛发帖,请发送电子邮件至 > [email protected] > <mailto:[email protected]>。 > 要取消订阅此网上论坛,请发送电子邮件至 > [email protected] > <mailto:perlchina%[email protected]>。 > 若有更多问题,请通过 > http://groups.google.com/group/perlchina?hl=zh-CN 访问 > 此网上论坛。 > > > -- > 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina > Mongers 讨论组”论坛。 > 要向此网上论坛发帖,请发送电子邮件至 > [email protected] > <mailto:[email protected]>。 > 要取消订阅此网上论坛,请发送电子邮件至 > [email protected] > <mailto:perlchina%[email protected]>。 > 若有更多问题,请通过 > http://groups.google.com/group/perlchina?hl=zh-CN 访问此网 > 上论坛。 > > -- > 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers > 讨论组”论坛。 > 要向此网上论坛发帖,请发送电子邮件至 > [email protected] <mailto:[email protected]>。 > 要取消订阅此网上论坛,请发送电子邮件至 > [email protected] > <mailto:perlchina%[email protected]>。 > 若有更多问题,请通过 > http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。 > > > -- > 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨 > 论组”论坛。 > 要向此网上论坛发帖,请发送电子邮件至 [email protected]。 > 要取消订阅此网上论坛,请发送电子邮件至 > [email protected]。 > 若有更多问题,请通过 > http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。 > > -- > 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组” > 论坛。 > 要向此网上论坛发帖,请发送电子邮件至 [email protected]。 > 要取消订阅此网上论坛,请发送电子邮件至 > [email protected]。 > 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN > 访问此网上论坛。
-- Fayland Lam // http://www.fayland.org/ -- 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。 要向此网上论坛发帖,请发送电子邮件至 [email protected]。 要取消订阅此网上论坛,请发送电子邮件至 [email protected]。 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
