で、私は次のクエリ(MySQLの)持っている:MySQLのクエリのヘルプ - 使い方= ANY
SELECT col1, col2 FROM database1.table
->WHERE col3 != ANY(SELECT col1 FROM database2.table)
->ORDER BY this, that;
をそして、私はこれがどこcol3という(まだ私はDATABASE1内のテーブルからcol1とcol2のを選択することができるようになる期待していました! in database1)は、database2のテーブルのcol1のものと等しくありません。
SELECT col1 FROM database2.tableは複数の行を返すので、当然これはうまくいかないため、row1と等しい場合はrow2と等しくないため、返されます。
これは正しい方法ですか?
MySQLでsubselectが最適化されていないことはわかりませんでした。つまり、必要な制約が利用可能な場合、NOT IN操作を反結合に変換するクエリ変換機能はありませんか? –
私もJOINを見ていきます。ありがとうございました! – Jason
'IN(SELECT ...)'を実行しているときに、MySQLは外側のもので見つかった各行の内部選択を実行します(外側の前に内部選択をただ1回実行するのではなく) SELECT col1 、col2、a.col FROM database1.table ON(table.col3 = a.col1)のようにLEFT JOIN(col1をデータベースから選択してcol2を選択) –