0

次のコマンドは、正しい orderRef を持つ 'items' に表示される 'stock' からすべてのアイテムを選択します。

SELECT a.* FROM stock a LEFT JOIN items b ON a.id = b.stockId WHERE b.orderRef='orderRef'

これは機能しますが、正しい orderRef を持つテーブル「items」にリストされていないすべてのアイテムが必要です。

「ON」を反対に変えようと思ったのですが、「OFF」ではうまくいきませんでした。

4

2 に答える 2

1

「not in」クエリを実行する最良の方法は、MySQL では次のとおりです。

select s.*
from stock s
where not exists (select 1 from items i where s.id = i.stockID and i.orderref = 'orderref' limit 1)

MySQL オプティマイザの動作方法は、not exists最高のパフォーマンスを発揮します。これは、items.stockID にインデックスを作成することでさらに強化できます。

左外部結合を使用する場合、2 番目のテーブルに重複がある場合、行数を誤って乗算する可能性があることに注意してください。

于 2012-10-15T20:43:42.947 に答える
0

これを試してください:

SELECT a.* FROM stock a LEFT JOIN items b ON a.id = b.stockId WHERE 
                b.stockId is null and a.orderRef='orderRef'
于 2012-10-15T20:37:28.827 に答える