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 访问此网上论坛。

回复