簡體   English   中英

如何在表2所在的表2行中滿足條件的情況下將表1左聯接

[英]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;

別名quantitylocationstock_date顯然是引用table2中滿足條件的一行: id=table1.idlocation=10

該查詢有效,但由於笨拙的子查詢,它可能不是最佳的。

我怎樣才能最好地將table1table2 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM