【发布时间】:2017-09-04 12:02:11
【问题描述】:
我尝试做这样的事情:
表 A
NameID | name | other rows
1 | name1
2 | nameA
3 | nameX
表 B
UniqueID | NameID | other rows
1 | 1
2 | 2
3 | 6
4 | 17
5 | 22
不,我想做这样的选择:
SELECT tablea.ID, tablea.name, tableb.*
FROM tablea
LEFT JOIN tableb ON tablea.ID = tableb.ID
WHERE
tablea.ID != '0'
我现在搜索 ID 和名称。
我总是得到名字,但不是总是得到 ID,只有当 ID 也在表 B 中时。为什么?
我的结果是这样的:
ID | name
1 | name1
2 | nameA
NULL | nameX
我有这种情况: 我有 TABLE A 电影(带有名称、数据等)。在表 B 我有 这些电影的评分。现在我用一个表格搜索,想看所有评级不完整或根本没有评级的电影,或者任何有或没有评级的电影。
在表 A(所有电影)上使用 LEFT JOIN 并加上 ON-Condition,我搜索电影是否有评级(是否在表 B 中)。 我的结果总是让我知道电影的名字。但是如果 movieID 不在表 B 中(= 没有记录收视率),我不会在结果中得到表 A 中的电影 ID。 所以不是我的整个结果只有movieID为NULL,我可以从这部电影的表A中提取任何其他数据,但不能是ID。
那为什么?
如果ID在ON-term中,是否不能要求tablea.ID?
【问题讨论】:
-
WHERE 将 LEFT JOIN 转换为 INNER JOIN.. 您应该将 WHERE 语句移至 ON 子句
-
我是否理解正确,WHERE 用于 tablea,ON 用于 tableb,我将它与之结合? WHERE 如何将 LEFT Join 转换为 INNER JOIN?
-
ID加入tablea.ID = tableb.ID是什么?NameID?/ -
@RaymondNijland 条件为
TABLE A,这是查询中使用的主表。 -
是的,在你的代码中你必须指定,你可以在你的选择中为列加上别名并尝试吗?