左连接导致列的空行没有空行

时间:2011-09-28 09:41:35

标签: mysql left-join

这让我感到困惑,即使表movie_image在列 mi.filename 中没有任何NULL值,我也会为此查询获取NULL列。

SELECT m.*, mi.filename, COUNT(p.movieid) AS publicationsCount
                FROM movies m
           LEFT JOIN (movie_publications p, movie_image mi)
                  ON (m.movieid = p.movieid
                      AND
                      p.movieid = mi.movieid)
               GROUP BY m.movieid

3 个答案:

答案 0 :(得分:4)

左连接将从第一个表(电影)中获取所有行,并尝试与第二个表(movie_publications)匹配。如果不可能插入NULL列而不是第二个表的列。

如果你不希望发生这种情况,你应该使用INNER JOIN。

更新:您在评论中说电影可以有或没有发布,但总会有图像,所以您可以按如下方式重写查询。如果您不完全确定所有电影都有图像,您也可以使用LEFT JOIN for movie_image。

SELECT m.*, mi.filename, COUNT(p.movieid) AS publicationsCount
    FROM movies m
    LEFT JOIN movie_publications p
        ON (m.movieid = p.movieid)
    INNER JOIN movie_image mi
        ON (m.movieid = mi.movieid)
    GROUP BY m.movieid

答案 1 :(得分:1)

LEFT JOIN返回左表中的所有行,即使右表中没有匹配项,而NULL表示不匹配。

答案 2 :(得分:1)

如果我找到你,那正是LEFT JOIN的用途:甚至为“不匹配的连接”得到结果。

您的查询遍历movies并为每一行至少发出一个结果行,即使其他表中没有“匹配的合作伙伴”。