1

サブクエリに一連の値があるかどうかを確認する最良の方法を知りたいです。次のクエリを思いつきましたが、効率的ではないと思います。

SELECT * FROM SomeTable 
WHERE 
(
    2 IN (SELECT OptionId FROM Table2 WHERE Table2_Id = 1) AND
    3 IN (SELECT OptionId FROM Table2 WHERE Table2_Id = 1)
)

誰かが私により良い解決策を提供していただければ幸いです。

ありがとう

4

1 に答える 1

2

EXISTSサブクエリを使用します:

SELECT * FROM SomeTable 
WHERE EXISTS (SELECT * FROM Table2 WHERE Table2_Id = 1 AND OptionId = 2) 
AND   EXISTS (SELECT * FROM Table2 WHERE Table2_Id = 1 AND OptionId = 3)

次のインデックスの(Table2_Id,OptionId)いずれかを持っている場合(OptionId,Table2_Id)、パフォーマンスについて心配する必要はありません。

編集1:上記のコメントを読んだ後、共通の列を使用してSomeTable何らかの方法で結合する必要があると思います:Table2

SELECT * FROM SomeTable x
WHERE EXISTS (SELECT * FROM Table2 y WHERE y.Table2_Id = 1 AND y.OptionId = 2 AND x.CommonColumn = y.CommonColumn) 
AND   EXISTS (SELECT * FROM Table2 y WHERE y.Table2_Id = 1 AND y.OptionId = 3 AND x.CommonColumn = y.CommonColumn)

これで問題が解決しない場合は、さらに情報を追加する必要があります。

于 2013-08-05T06:35:17.687 に答える