【发布时间】:2016-04-27 04:27:27
【问题描述】:
我正在尝试使用右连接选择 TABLEC 中的所有记录及其在 TABLEA 或 TABLEB 中的等效值。我正在使用 MYSQL 5.5.47。
--表格数据如下
TABLEA TABLEB TABLEC
ID FNAME ID MNAME ID LNAME
0 ANOOP 0 N 0 SINGH
1 BIMA 2 SITA 3 RAJ
4 CIMI 4 B 5 KUMAR
6 RAVI 5 A 6 D
--使用下面的查询并尝试选择 TABLEC 中的所有记录及其在 TABLEA 或 TABLEB 中的等效值
SELECT A.FNAME, B.MNAME, C.LNAME
FROM TABLEA AS A
RIGHT JOIN TABLEB AS B ON A.ID = B.ID
RIGHT JOIN TABLEC AS C ON C.ID = B.ID
--我得到以下结果
ANOOP N SINGH
NULL NULL RAJ
NULL A KUMAR
***NULL*** NULL D
在 MYSQL 5.5.47 中,突出显示的值不会显示为“RAVI”,而是显示为 NULL。我试图修改与 C & A 相关的第二个连接中的 '=' 条件,但仍然没有运气。我在这里做错了什么?如何获得值“RAVI”来代替 NULL?任何建议都会非常有帮助。
【问题讨论】:
-
添加有问题的预期结果
-
表 A RIGHT JOIN 表 B 给出“获取表 A 中键与表 B 中匹配的所有记录,并返回表 B 的所有行”。因此,在您的第一个连接语句本身中,Ravi ,其 id 为 6 且其 id 6 不存在于表 B 中,正在被淘汰。我们如何决定需要右连接?
-
您是否在此处寻找完整的外部联接?还是只保留显示为姓氏的记录?
-
虽然理论上每个 LEFT JOIN 都有一个逻辑上等价的 RIGHT JOIN,但在实践中 RIGHT JOIN 非常罕见 - 我怀疑部分原因是,像我一样,许多人发现它们违反直觉。跨度>
-
切换到左连接。大多数人觉得右连接太混乱了。