mysql - 左连接条件

标签 mysql join

我正在尝试以下查询,其中 TABLE B 为空且 TABLEA 中有记录

--This query fetched no records
SELECT TABLEA.COLA,TABLEA.COLB FROM TABLEA 
LEFT JOIN  TABLEB
ON TABLEA.ID=TABLEB.ID
WHERE TABLEB.COL1<>'XYZ'

--This query fetched records .
SELECT COL1 FROM 
(
SELECT TABLEA.COLA,TABLEA.COLB FROM TABLEA 
LEFT JOIN  TABLEB
ON TABLEA.ID=TABLEB.ID
)A WHERE COL1 <>'XYZ'

你能帮我解释为什么第一个查询没有返回任何记录,尽管它们看起来相同。我对第一个查询的理解是“我做了一个左连接,所以如果 tableb 中不存在记录,则应将其替换为 NULL 值。由于 NULL <>'xyz' 所有记录都应正确获取。

最佳答案

在 OUTER JOIN 的 OUTER 连接表上放置 WHERE 条件可有效将该连接呈现为 INNER JOIN。因此,如果外表中没有满足条件的行,则不会返回任何行。

解决方案是在连接本身中包含任何此类条件。在上面的示例中,这就像将 WHERE 更改为 AND 一样简单。

必须放在 WHERE 子句中的一个条件是对 NULL 的测试,即所谓的排除连接 - 即当你真正想要返回逆集时。

关于mysql - 左连接条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26418552/

相关文章:

mysql - 为什么MyISAM需要读锁而备份而Innodb不需要

php - 更新/插入 mysql 查询

mysql - Sql 将列序列化为一条记录以供搜索

mysql - 嵌套连接的更新语句不起作用

多个选择语句上的mysql连接语法错误

LINQ 连接错误

mysql - 更新查询 "You can' t 在 FROM 子句中指定目标表 'a' 进行更新”

PHP如何从序列化的mysql字符串中提取变量?

mysql - SQL UPDATE 语句中的语法错误,但似乎一切正常 :(

MySQL连接两个表并添加列值