gpt4 book ai didi

MySQL左外连接与where子句 - 返回不匹配的行

转载 作者:IT老高 更新时间:2023-10-29 00:02:20 26 4
gpt4 key购买 nike

我有两个表:pqpe。我正在尝试在右表 (pe) 上LEFT OUTER JOIN 左表 (pq)。

  • pq 有主键列 id
  • pe 有两列主键,所以它可能有很多 pqid 或没有
  • pe.uid 列只能用于提取相关数据 (WHERE pe.uid = "12345")
  • pe.data 应该连接到每个 pq.id 行

这是表格的样子:

pq:
id | data
1 | "abc"
2 | "efg"

pe:
pqid | uid | data
2 | 54321 | "uvw"
2 | 12345 | "xyz"

我可以使用以下查询将 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

我得到:

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 和 pe.uid 的一行:

pq.id | pq.data |  pe.data
2 | "efg" | "xyz"

因此,通过 WHERE 子句,我得到了正确的 pe.data,但我没有得到没有 pqpq 行。 id匹配pe.pqid

我需要得到这个:

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

关于MySQL左外连接与where子句 - 返回不匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17910729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com