我尝试做这样的事情:
表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
我遇到这种情况: 我在表A中有电影(有名字,数据等)。在表B中我有 这些电影的收视率。现在我用表格搜索,想看所有电影,评分不完整,或根本没有收视率,或任何电影尽管有或没有收视率。
在表A(所有电影)上进行LEFT JOIN并添加ON-Condition I搜索电影是否具有评级(表B中是否有)。 总的来说,我的结果让我得到了电影的名字。但是如果movieID不在表B中(=没有记录评级),我就不会在结果中得到表A中电影的ID。 因此,我的整个结果不仅仅是NULL的movieID,我可以从这个电影的表A中拉出任何其他DATA,而不是ID。
为什么?
如果ID在ON期限内,是否无法请求tablea.ID?
答案 0 :(得分:0)
左连接将显示第一个表中的所有行,并在找到匹配的行时从第二个表中添加数据。 如果找不到匹配的行,则左连接将为这些行返回null(这意味着"未知")。 如果要从结果中丢弃在其他表中没有匹配行的行,则必须使用" inner join"而不是"左连接"。 检查联接的可视化表示以获取更多信息:https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
答案 1 :(得分:0)
解决方案是,为表1中的行设置一个别名,该别名在第二个表中重复,并且由于没有"行"在第二个表中结果为NULL。 如果我在其中添加别名,我可以选择它,LEFT JOIN将完成其余的工作。
要知道的是:如果行名称在select的其他表中是相同的,则mysql_fetch_object将始终选择最后一行。在我的情况下,我LEFT JOIN第二个具有相同行名的表。由于LEFT JOIN,我在ON条件下没有结果,我的查询的正确结果是NULL。