以下命令使用正確的orderRef選擇'商品'中出現的'商品'中的所有商品。從表格a中選擇何時不在表格中b
SELECT a.* FROM stock a LEFT JOIN items b ON a.id = b.stockId WHERE b.orderRef='orderRef'
這工作,但我需要未在表「項目」用正確的orderRef列出的所有項目。
我以爲我應該改變'開'到它的對面,但'關'不起作用。
以下命令使用正確的orderRef選擇'商品'中出現的'商品'中的所有商品。從表格a中選擇何時不在表格中b
SELECT a.* FROM stock a LEFT JOIN items b ON a.id = b.stockId WHERE b.orderRef='orderRef'
這工作,但我需要未在表「項目」用正確的orderRef列出的所有項目。
我以爲我應該改變'開'到它的對面,但'關'不起作用。
的最好辦法做一個「不」查詢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進行索引來進一步增強。
請注意,當您使用左外部聯接時,如果第二個表中存在重複項,您可能會無意中將行的數目相乘。
偉大的工程,謝謝你 – LewiG
如果它的項目中沒有匹配的行,它如何具有正確的'orderRef'? – Erik
我使用st-> bindValue – LewiG
yes來添加orderRef,但是'orderRef'在表b中...並且您希望表a中沒有表b中的條目的行... – Erik