![](/img/trans.png)
[英]Mysql join should return all from table A not in table B AND where clause for table B
[英]Mysql - return all results from table A and selectively join with table B
我有兩張桌子:
默認:
+----+--------+
| id | colour |
+----+--------+
| 1 | red |
| 2 | green |
| 3 | yellow |
+----+--------+
風俗:
+--------+--------------+---------+
| linkId | customcolour | ownerId |
+--------+--------------+---------+
| 1 | bright red | 1 |
| 2 | garden green | 2 |
+--------+--------------+---------+
我想從默認表中返回所有內容,然后獲取任何關聯的自定義顏色(通過 linkId)。 我正在使用的查詢是:
SELECT a.colour, b.customcolour
FROM default a
LEFT JOIN custom b ON a.id = b.linkId
WHERE (b.ownerId IS NULL OR b.ownerId = 1)
GROUP BY a.id ORDER BY a.colur
但是,當我加入自定義表時,它不會 select 自定義鏈接 ID 2,因為 ownerId 不是 1 也不是 NULL。 有沒有辦法返回行 default.id = 2 並將 customercolour 設置為 NULL,而不將其添加到表中?
您需要將 WHERE 條件移動到聯接中
SELECT a.colour, b.customcolour
FROM default a
LEFT JOIN custom b ON a.id = b.linkId AND (b.ownerId IS NULL OR b.ownerId = 1)
GROUP BY a.id ORDER BY a.colur
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.