如何编写以下mySQL查询?
问题描述:
我有以下格式的数据库:如何编写以下mySQL查询?
idA | idB | stringValue
----+-----+------------
xyz | 1 | ANDFGFRDFG
xyz | 2 | DTGDFHFGH
xyz | 3 | DFDFDS
abc | 5 | DGDFHHGH
abc | 6 | GG
...
IDA和美洲开发银行一起是唯一的。
我有一个文件(list.txt
),像这样的ID对的列表:
xyz 2
abc 5
abc 6
...
,我想每一行与stringValue
打印。请注意,该文件中的一些ID可能不在数据库中。在那种情况下,我根本不想打印它们。
总之,我想过滤使用文件的表。
答
SELECT idA, idB, stringValue FROM table WHERE idA = 'xyz' AND idB = 12;
会给你哪里IDA等于“XYZ”的所有列和美洲开发银行= 12
答
数or子句将基于文件的组合的数量是动态的。
你可能会需要将此上的
SELECT * FROM myTable
WHERE
(idA = 'xyz'AND idB = '2')
OR
(idA = 'abc'AND idB = '5')
OR
(idA = 'abc'AND idB = '6')
......
答
一些SQL客户做提供便利,让您直接从文件创建查询或数据线动态创建的查询。不过,我相信更好的方法是为此编写一个脚本。
根据你最近给喜欢this one其他问题,那么也许在Perl下面的解决方案可以帮助你:
use 5.012;
use warnings;
use SQL::Abstract;
my $sql = SQL::Abstract->new;
my @cols = qw/ idA idB stringValue /;
my $where = build_sql_where_from_file('list.txt', @cols[0,1]);
my ($query, @bind) = $sql->select(
'yourTable',
\@cols,
$where,
);
sub build_sql_where_from_file {
my $file = shift;
my @build;
open my $fh, '<', $file or die $!;
for my $line (<$fh>) {
chomp $line;
my @fields = split//, $line;
push @build, {
-and => [
map { $_ => shift @fields } @_,
]
};
}
return \@build;
}
如果我现在要做以下使用例如list.txt
...
say $query;
say join ":", @bind;
然后我得到:
SELECT idA, idB, stringValue FROM yourTable WHERE (((idA = ? AND idB = ?) OR (idA = ? AND idB = ?) OR (idA = ? AND idB = ?)))
xyz:2:abc:5:abc:6
这正是我n然后直接插入DBI
查询。
希望有所帮助。
/I3az/
但我可以使用一个文件来做它的每一行吗? – 2010-09-15 09:18:18
不需要。您需要编写一个脚本来帮助您。 – halfdan 2010-09-15 09:19:03