gpt4 book ai didi

mysql - 为什么 mysql 将 NULL 值与 WHERE 条件中的任何字符串匹配?

转载 作者:行者123 更新时间:2023-11-28 23:27:16 24 4
gpt4 key购买 nike

我有简单的 MySQL 表(针对这个问题进行了简化):

table A - id int, name varchar(255), id_b int
table B - id int, name varchar(255)

我在表 A 中有这些值:

1, 'a1', 10
2, 'a2', 11
3, 'a3', 12

我在表 B 中有这些值:

21, 'b1'
22, 'b2'
23, 'b3'

我有这个查询:

SELECT A.name, (SELECT B.name FROM B WHERE B.id = A.id_b) AS name_ext FROM  A WHERE name_ext = 'something';

我期望得到空结果,但相反,我从表 A 中得到了所有 3 行,其中 name_ext 的值为 NULL。这怎么可能 ?我应该怎么做才能获得预期的结果?

提前感谢您的帮助。

最佳答案

此查询运行正常。它等效于以下内容:

SELECT A.name, B.name 
FROM A
LEFT OUTER JOIN B ON B.id = A.id_b
WHERE A.name_ext = 'something'

如果没有匹配项,则外连接会将 B.* 中的所有列返回为 NULL。但是查询的结果对于A的每一行仍然有一行。

同样在您的版本中:

SELECT A.name, (SELECT B.name FROM B WHERE B.id = A.id_b) AS name_ext
FROM A WHERE name_ext = 'something';

不管怎样,主查询都会为 A 的每一行返回一行。 如果子查询在 B 中找到匹配项,则返回该匹配项。否则,如果找不到匹配项,查询仍会返回一行,并且 B 中缺少匹配项会在第二列中显示为 NULL。

如果您希望查询返回 在 B 中具有匹配项的行,请使用:

SELECT A.name, B.name 
FROM A
INNER JOIN B ON B.id = A.id_b
WHERE A.name_ext = 'something'

关于mysql - 为什么 mysql 将 NULL 值与 WHERE 条件中的任何字符串匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38793173/

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