[英]MySQL left outer join with where clause - return unmatched rows
我有兩張桌子: pq和pe 。 我想LEFT OUTER JOIN
留在右表(PE)表(PQ)。
WHERE pe.uid = "12345"
) 表格如下:
pq:
id | data
1 | "abc"
2 | "efg"
pe:
pqid | uid | data
2 | 54321 | "uvw"
2 | 12345 | "xyz"
我可以使用以下查詢將pq .id的前2行與pe .pqid進行匹配
SELECT pq.id, pq.data, pe.data FROM pq
LEFT OUTER JOIN pe ON pq.id = pe.pqid
ORDER BY pq.id LIMIT 2
我明白了:
pq.id | pq.data | pe.data
1 | "abc" |
2 | "efg" | "uvw"
但是如果我像這樣使用WHERE語句:
SELECT pq.id, pq.data, pe.data FROM pq
LEFT OUTER JOIN pe ON pq.id = pe.pqid
WHERE pe.uid='12345'
ORDER BY pq.id LIMIT 2
我只得到一行匹配pe .pqid AND pe .uid:
pq.id | pq.data | pe.data
2 | "efg" | "xyz"
所以使用WHERE子句我得到了正確的pe .data,但我沒有得到沒有匹配pe .pqid的pq .id的pq行
我需要得到這個:
pq.id | pq.data | pe.data
1 | "abc" |
2 | "efg" | "xyz"
是。 where
子句將左外連接轉換為內連接。
為什么? 當沒有匹配時, pe.pqid
值為NULL
(如pe.uid
)。 所以where
子句中的比較失敗(幾乎所有與NULL
比較都返回NULL
,這被認為是假的)。
解決方案是將比較移動到on
子句:
SELECT pq.id, pq.data, pe.data
FROM pq LEFT OUTER JOIN
pe
ON pq.id = pe.pqid and
pe.uid='12345'
ORDER BY pq.id LIMIT 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.