繁体   English   中英

在辅助表中使用 INNER 和 LEFT JOIN 的差异

[英]Differences using INNER and LEFT JOIN in secondary tables

我有一个关于在 3 个表之间使用三个连接的问题。 更改第二个和第三个表之间的 JOIN 类型,结果发生变化,我不明白为什么。

表 1 姓名和年龄

姓名 年龄
账单 20
约翰 25
玛莎 34
史蒂夫 40
爱米丽 30

表 2 名称和 ID

姓名 ID
账单 001S
约翰 002B
玛莎 001Z

表 3 ID 和爱好

ID 爱好
001S 足球
002B 音乐
001Z 排球

示例 1

SELECT NAME, HOBBIES
FROM TABLE1
LEFT JOIN TABLE2 ON TABLE1.NAME = TABLE2.NAME
LEFT JOIN TABLE3 ON TABLE2.ID = TABLE3.ID

示例 2

SELECT NAME, HOBBIES
FROM TABLE1
LEFT JOIN TABLE2 ON TABLE1.NAME = TABLE2.NAME
INNER JOIN TABLE3 ON TABLE2.ID = TABLE3.ID

我想要所有的名字,不管他们有没有兴趣爱好。 这只发生在 EXAMPLE1 中,在 EXAMPLE2 中,查询返回带有 HOBBIES 的 NAMES,但我不明白为什么它不适用于 EXAMPLE2。 唯一的区别是 INNER,这不会影响表 1 和表 2 之间的关系。

我哪里错了?

由于您在后面的连接中使用了 INNER JOIN:

INNER JOIN TABLE3 ON TABLE2.ID = TABLE3.ID

此条件要求该行包含TABLE2.ID的非 NULL 值。 这排除了与TABLE2的连接没有产生匹配的任何情况。

您可以通过对TABLE2TABLE3的配对进行外部连接来解决此问题:

SELECT TABLE1.NAME, HOBBIES
FROM TABLE1
LEFT JOIN (TABLE2 INNER JOIN TABLE3 ON TABLE2.ID = TABLE3.ID)
   ON TABLE1.NAME = TABLE2.NAME;

您也可以使用RIGHT OUTER JOIN解决它:

SELECT TABLE1.NAME, HOBBIES
FROM TABLE2 INNER JOIN TABLE3 ON TABLE2.ID = TABLE3.ID
RIGHT OUTER JOIN TABLE1 ON TABLE1.NAME = TABLE2.NAME;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM