Xeo*_*eos 15 mysql sql join left-join
我有两张桌子:pq和pe.我想把LEFT OUTER JOIN
桌子(pq)留在右边的桌子(pe)上.
WHERE pe.uid = "12345"
)表格如下:
pq:
id | data
1 | "abc"
2 | "efg"
pe:
pqid | uid | data
2 | 54321 | "uvw"
2 | 12345 | "xyz"
Run Code Online (Sandbox Code Playgroud)
我可以使用以下查询将pq .id的前两行与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
Run Code Online (Sandbox Code Playgroud)
我明白了:
pq.id | pq.data | pe.data
1 | "abc" |
2 | "efg" | "uvw"
Run Code Online (Sandbox Code Playgroud)
但是如果我像这样使用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
Run Code Online (Sandbox Code Playgroud)
我只得到一行匹配pe .pqid AND pe .uid:
pq.id | pq.data | pe.data
2 | "efg" | "xyz"
Run Code Online (Sandbox Code Playgroud)
所以使用WHERE子句我得到了正确的pe .data,但我没有得到没有匹配pe .pqid的pq .id的pq行
我需要得到这个:
pq.id | pq.data | pe.data
1 | "abc" |
2 | "efg" | "xyz"
Run Code Online (Sandbox Code Playgroud)
Gor*_*off 40
是.该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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
32360 次 |
最近记录: |