これらは両方とも有効なISO/ANSI完全SQL-92構文です。
SELECT a.*
FROM Accounts a
INNER JOIN
( VALUES('0123456', '2000897'), ('0125556', '2000866')
) AS v(TaxID, AccountNumber)
ON (a.TaxID, a.AccountNumber) = (v.TaxID, v.AccountNumber)
SELECT *
FROM Accounts a
WHERE (a.TaxID, a.AccountNumber) IN
( VALUES ('0123456', '2000897'), ('0125556', '2000866') )
しかし、どちらも現在のDBMSでは機能しないと思います。
これは、完全なSQL-92構文でも有効です(SQL-Server 2008では、次の理由により機能しませんNATURAL JOIN
)。
SELECT a.*
FROM Accounts a
NATURAL JOIN
( VALUES('0123456', '2000897'), ('0125556', '2000866')
) AS v(TaxID, AccountNumber)
これも有効なSQLです(92仕様以降かどうかはわかりません)-そしてあなたが持っているものです(ただし、中括弧ではなく括弧を使用します)。
MySQL、Postgres、DB2でサポートされています(SQL Serverではサポートされていません)。
SELECT a.*
FROM Accounts a
WHERE (TaxID, AccountNumber) IN
( ('0123456', '2000897'), ('0125556', '2000866') )
;
DBA.SEにも同様の質問がありますが、これを定式化する他のさまざまな方法が
あります。2つの列がセット内のどこにあるかを選択することです。