小编典典

为什么使用WHERE子句时,MySQL的LEFT JOIN返回“ returnULL”记录?

sql

今天,我尝试了一些更复杂的MySQL查询,并且注意到MySQL的LEFTJOIN无法与WHERE子句一起使用。我的意思是,它确实会返回一些记录,但不会返回右侧为空的记录。

例如,假设我们要到表:

albums                                   ; albums_rap
  id artist        title         tracks  ;    id artist    title           rank
---- -------- ---------- --------------- ;  ---- --------- ----- --------------
   1 John Doe     Mix CD              20 ;     3 Mark      CD #7            15
   2 Mark          CD #7              35 ;

当我运行此查询时:

SELECT 
    t1.artist as artist,
    t1.title as title,
    t1.tracks as tracks,
    t2.rank as rank,
FROM
    albums as t1
LEFT JOIN
    albums_rap as t2
ON 
    t1.artist LIKE t2.artist
AND
    t1.title LIKE t2.title
WHERE
    t2.rank != 17

我得到这个:

artist title tracks  rank
------ ----- ------ -----
Mark   CD #7     35    15

但是,当我在此查询中将“ WHERE”替换为“ AND”时,我得到:

artist     title tracks  rank
------ --------- ------ -----
Mark       CD #7     35    15
John Doe  Mix CD     20  NULL

为什么第一个不返回带有“ NULL”的记录(null不等于17 …)

希望您能理解我的意思,并且可以以某种方式向我解释两者之间的区别。对不起,我的英语不好,这不是我的母语。


阅读 193

收藏
2021-04-15

共1个答案

小编典典

左联接条件和条件过滤器都不相同。物理连接完成后,数据由where子句过滤。如果您查找左联接,则通常会返回左表中的每一行,但是一旦有了where子句,它将过滤联接的输出,因此结果类似于内部联接。您将需要关注下图左侧的两个图表。

2021-04-15