簡體   English   中英

如何編寫以下mySQL查詢?

[英]How do I write the following mySQL query?

我有以下格式的數據庫:

idA | idB | stringValue
----+-----+------------
xyz |  1  | ANDFGFRDFG
xyz |  2  | DTGDFHFGH
xyz |  3  | DFDFDS
abc |  5  | DGDFHHGH
abc |  6  | GG
...

idA和idB 一起是唯一的。

我有一個文件( 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”而idB等於12的所有列。

OR子句的數量將根據文件中組合的數量而動態變化。

您可能需要根據以下內容使它成為動態創建的查詢

SELECT * FROM myTable
WHERE 
(idA = 'xyz'AND idB = '2')
OR 
(idA = 'abc'AND idB = '5')
OR
(idA = 'abc'AND idB = '6')
......

某些SQL客戶端確實提供了使您可以直接從文件創建查詢或數據的功能。 但是我相信更好的方法是為此編寫一個腳本。

根據您最近像這樣提出的其他問題,那么也許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

這正是我需要直接插入DBI查詢的內容。

希望能有所幫助。

/ I3az /

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM