[英]How to LEFT JOIN table1 ON table2 WHERE table2 row fulfills certain conditions
請考慮以下查詢:
SELECT table1.* ,
(SELECT quantity FROM table2 WHERE id = table1.id AND table2.location = 10) quantity,
(SELECT reorder_level FROM table2 WHERE id = table1.id AND table2.location = 10) reorder_level,
(SELECT stock_date FROM table2 WHERE id = table1.id AND table2.location = 10) stock_date
FROM table1
WHERE category_id = 5 ORDER BY table1.id;
別名quantity
, location
和stock_date
顯然是引用table2
中滿足條件的一行: id=table1.id
和location=10
。
該查詢有效,但由於笨拙的子查詢,它可能不是最佳的。
我怎樣才能最好地將table1
到table2
USING(id),但只能在location
也是10的行上聯接。
提示: table1
中的一行在table2
有很多行。
不幸的是,實際的表定義要復雜得多,我認為將整個內容轉儲到該線程中可能會適得其反。
您可以在ON()
部分中使用附加條件,因此它將僅聯接滿足所提供條件的行
SELECT t1.* ,
t2.quantity ,
t2.reorder_level,
t2.stock_date
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id AND t2.location = 10
WHERE t1.category_id = 5
ORDER BY t1.id;
另一種方法是對表2使用subselect並僅選擇位置等於10的行
SELECT t1.* ,
t2.quantity ,
t2.reorder_level,
t2.stock_date
FROM table1 t1
LEFT JOIN
(SELECT * FROM table2 WHERE t2.location = 10) t2
ON t1.id = t2.id
WHERE t1.category_id = 5
ORDER BY t1.id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.