今天,我尝试了一些更复杂的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 …)
希望您能理解我的意思,并且可以以某种方式向我解释两者之间的区别。对不起,我的英语不好,这不是我的母语。
左联接条件和条件过滤器都不相同。物理连接完成后,数据由where子句过滤。如果您查找左联接,则通常会返回左表中的每一行,但是一旦有了where子句,它将过滤联接的输出,因此结果类似于内部联接。您将需要关注下图左侧的两个图表。