正確な SQL 方言を知らなくても、次のことを実行しますINNER JOIN
。
SELECT ProductID, AccountID, ContractID
FROM X
INNER JOIN MemTable m ON m.ProductID = X.ProductID AND m.AccountID = X.AccountID
タグとして追加さJava
れましたが、マップは Java アプリケーション内にあると考えてよろしいですか? もしそうなら、それは難しくなります - 実際には、データベースに何百万回も問い合わせる必要があるかもしれません.
一方、次のような 1 つの大きな SQL ステートメントを含む文字列を作成することもできます。
SELECT * FROM X WHERE ProductID IN (...) AND AccountID IN (...)
ループは、製品 ID とアカウント ID のリストをコンマで区切って入力するだけです。次に、そのコマンドを 1 回発行します。両方の ID が数値であると仮定すると、コマンドはたとえば次のようになります。
SELECT * FROM X WHERE ProductID IN (1,2,3,4) AND AccountID IN (99,88,77)
編集
私の最後の提案には次の欠陥がある可能性があることに注意してください(これが実際に問題であるかどうかを判断する必要があります):
マップに (1, 99) と (3, 77) が含まれていると仮定しますが、テーブルX
には追加のレコード (1, 77) と (3, 99) があります。私のクエリの結果は、(1,99)、(3, 77)、(1, 77)、および (3, 99) になります。これは、両方の ID が「エンティティ」としてではなく個別に扱われるためです。
そのため、指定された ProductID と AccountID の任意の組み合わせを含む行がある限り、それらが返されます。
SELECT
使用しているDBシステムでこれが許可されていると仮定すると、ステートメントを次のように展開できます。
SELECT ProductID, AccountID, ContractID FROM X WHERE ProductID = <ValueFromMap> AND AccountID = <ValueFromMap>
UNION ALL
SELECT ProductID, AccountID, ContractID FROM X WHERE ...
UNION ALL
...