sql >> データベース >  >> RDS >> PostgreSQL

一意のペアのリストに基づいてデータベースから選択する

    Postgresqlには最も洗練されたソリューションがあると思います:

    SELECT  *
    FROM    T
    WHERE   ("Key", "Value") IN (('B', 'Alpha'), ('A', 'Charlie'));
    

    SQLフィドルの例

    SQL-SERVER 2008以降では、VALUESを使用できます。 タプルを作成するには:

    SELECT  T.*
    FROM    T
            INNER JOIN
            (   VALUES
                    ('B', 'Alpha'),
                    ('A', 'Charlie')
            ) v (Key, Value)
                ON v.Key = T.Key
                AND v.Value = T.Value
    

    SQLフィドルの例

    または、プロシージャの場合、キーと値のペアタイプを作成し、これをパラメータとして渡すことができます。

    CREATE TYPE KeyValuePair AS TABLE ([Key] VARCHAR(1), [Value] VARCHAR(7));
    
    DECLARE @T AS KeyValuePair
    INSERT @T 
    VALUES
        ('B', 'Alpha'),
        ('A', 'Charlie')
    
    
    SELECT  T.*
    FROM    T
            INNER JOIN @T v
                ON v.[Key] = T.[Key]
                AND v.Value = T.Value;
    

    SQLフィドルの例

    MySQLの場合、AND/ORを使用してこれをビルドする必要があると思います

    SELECT  *
    FROM    T
    WHERE   (`Key` = 'A' AND `Value` = 'Charlie')
    OR      (`Key` = 'B' AND `Value` = 'Alpha')
    

    SQLフィドルの例

    他のDBMSに関する私の知識は限られているので、それが上記のいずれでもない場合は、申し訳ありませんが、これ以上お役に立てることはありません。

    編集(a_horse_with_no_name の助けを借りて )

    PostgreSQL構文は、Oracle でも機能します。 (そして私はDB2だと思います)




    1. パラメータ付きのMySQLスクリプト

    2. ランダムエラー:#1045MySQLサーバーにログインできません

    3. MySQLの自動シャットダウン

    4. グループ化によるMySQLの削除