如果第二个表没有匹配,则Mysql返回零行

时间:2015-09-17 01:44:57

标签: mysql sql

我有以下声明:

SELECT
    a.user_id AS user_id,
    a.user_name AS user_name,
    GROUP_CONCAT(b.course_id SEPARATOR ',') AS course_ids
FROM
    user_courses b JOIN user a ON b.user_id_id = a.user_id
GROUP BY
    a.user_id;

我希望它返回所有用户及其课程,我也希望它为没有课程的用户返回一行。但是,结果仅包含至少有一门课程的用户。即使他们在user_courses表中没有课程,我如何才能返回所有用户?

1 个答案:

答案 0 :(得分:3)

您需要left join(并先放user):

SELECT u.user_id, u.user_name,
       GROUP_CONCAT(uc.course_id SEPARATOR ',') AS course_ids
FROM user u LEFT JOIN
     user_courses uc 
     ON u.user_id_id = uc.user_id
GROUP BY u.user_id;

请注意,当您使用表别名的缩写而不是ab等无意义的字母时,查询会更容易理解。