我在网上找到了一个SELECT示例。 当我在我的脚本中尝试它时,我收到此错误消息:
Specifying DISTINCT when using aggregate functions isn't reasonable - ignored. at /usr/lib/perl5/site_perl/5.10.0/SQL/Parser.pm line 496.
#!/usr/bin/perl
use warnings;
use strict;
use DBI;
my $dbh = DBI->connect( "DBI:CSV:", undef, undef, { RaiseError => 1, AutoCommit => 1 } );
my $table = 'artikel';
my $array_ref = [ [ 'a_nr', 'a_name', 'a_preis' ],
[ 12, 'Oberhemd', 39.80, ],
[ 22, 'Mantel', 360.00, ],
[ 11, 'Oberhemd', 44.20, ],
[ 13, 'Hose', 119.50, ],
];
$dbh->do( "CREATE TEMP TABLE $table AS IMPORT(?)", {}, $array_ref );
my $sth = $dbh->prepare( "SELECT DISTINCT a_name FROM $table" );
$sth->execute();
$sth->dump_results();
$dbh->disconnect();
SELECT DISTINCT不能用于DBD :: CSV或我的脚本有问题吗?
编辑: 输出是
'Oberhemd'
'Mantel'
'Oberhemd'
'Hose'
4 rows
我认为应该是
'Oberhemd'
'Mantel'
'Hose'
3 rows
已安装的版本:
Perl : 5.010000 (x86_64-linux-thread-multi)
OS : linux (2.6.31)
DBI : 1.609
DBD::Sponge : 12.010002
DBD::SQLite : 1.25
DBD::Proxy : 0.2004
DBD::Gofer : 0.011565
DBD::File : 0.37
DBD::ExampleP : 12.010007
DBD::DBM : 0.03
DBD::CSV : 0.26
答案 0 :(得分:3)
请注意,关于某些不合理的消息是
我闻到了DBD::CSV
或SQL::Statement
中的错误。
编辑: DISTINCT
明确允许SQL::Statement
答案 1 :(得分:3)
嗨这是一个容易重现的错误。 SELECT data_display_mask FROM test.csv返回200多行。 SELECT DISTINCT data_display_mask FROM test.csv返回警告消息和相同的200行。
如果我做一个awk,将-u排序为唯一(行的值),我得到36个值,这就是我所期望的。
当然是代码中的错误。
-Kanwar
perl -V 我的perl5(修订版5版本10颠覆0)配置摘要: 平台: osname = linux,osvers = 2.2.24-6.2.3,archname = i686-linux-thread-multi
DBD :: CSV 0.26 SQL :: Parser 1.23 DBI 1.609
示例:
使用聚合函数时指定DISTINCT是不合理的 - 忽略。在/opt/perl2exe/perl5/lib/site_perl/5.10.0/SQL/Parser.pm第496行。 87060 87060 87060 87060
使用的SQL是SELECT DISTINCT entry_id FROM test.csv
答案 2 :(得分:1)
my $sth = $dbh->prepare("SELECT DISTINCT $attributeName1, COUNT( $attributeName2) FROM tableName GROUP BY $attributeName1, $attributeName2");
这给了我:attributeName1和一个非常统计的attributeName2
答案 3 :(得分:0)
我遇到了同样的问题。
您可以使用GROUP BY
语句而不是DISTINCT
来解决此问题。
这只是等待解决错误的转变......
答案 4 :(得分:0)
这是DBD::CSV
更普遍现象的一个例子,即它允许大量的SQL语法,其含义被默默忽略。
我见过SELECT DISTINCT
实际过滤掉重复项的情况,所以你在这里提到的情况似乎是一个bug,
但我还没有办法让DISTINCT
中的SELECT COUNT(DISTINCT foo) FROM bar
做任何事情。
答案 5 :(得分:0)
适合我。我回来了3行。
$ perl x.pl
'Oberhemd'
'Mantel'
'Hose'
3 rows
perl -MDBI -le 'DBI->installed_versions;'
Perl : 5.010001 (i686-linux-gnu-thread-multi)
OS : linux (2.6.24-28-server)
DBI : 1.617
DBD::mysql : 4.020
DBD::Sys : 0.102
DBD::Sponge : 12.010002
DBD::SQLite : 1.33
DBD::Proxy : 0.2004
DBD::Pg : 2.17.2
DBD::Oracle : 1.38
DBD::ODBC : 1.33
DBD::Multiplex : 2.014122
DBD::Gofer : 0.015057
DBD::File : 0.40
DBD::ExampleP : 12.014310
DBD::DBM : 0.06
DBD::CSV : 0.30
添加了:
perl -MSQL::Statement -le 'print $SQL::Statement::VERSION'
1.31
版本1.23,发布于2009年11月20日 *在聚合函数中正确处理DISTINCT