MySQL Left Join在表B中没有匹配项,表A中没有ID

时间:2017-09-04 12:02:12

标签: mysql join

我尝试做这样的事情:

表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?

2 个答案:

答案 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。