如何编写以下mySQL查询?

如何编写以下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

+0

但我可以使用一个文件来做它的每一行吗? – 2010-09-15 09:18:18

+0

不需要。您需要编写一个脚本来帮助您。 – halfdan 2010-09-15 09:19:03

数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/