带有GROUP_CONCAT的SQL命令和空值

时间:2017-05-31 12:47:22

标签: mysql sql

我有1个SQL命令可以从2个不同的表中选择数据。

第一个表是“sections”(id,title,text),第二个表是“sections_multimedia”(id,section_id,filename)

我使用GROUP_CONCAT来获取页面的所有部分以及每个部分的多媒体(照片)

我的命令如下:

SELECT s.*, GROUP_CONCAT(CONCAT_WS(':', sm.id, sm.filename) SEPARATOR ',') AS multimedia
                                FROM sections AS s, sections_multimedia AS sm
                                WHERE s.id = sm.section_id
                                GROUP BY sm.section_id
                                ORDER BY s.id ASC;

表“sections”和表“sections_multimedia”通过“sections_multimedia”表的“section_id”字段连接。

上面的SQL命令工作正常,唯一的问题是: 当“sections”表中的一行在“sections_multimedia”表中没有任何内容时,它不会显示在结果中。

无论“sections_multimedia”表中是否有任何数据,我该如何从表“部分”中获取所有数据?

谢谢!

1 个答案:

答案 0 :(得分:1)

从不FROM子句中使用逗号。 始终使用正确的,明确的JOIN语法。在您的情况下,您需要LEFT JOIN

SELECT s.*,
       GROUP_CONCAT(CONCAT_WS(':', sm.id, sm.filename) SEPARATOR ',') AS multimedia
FROM sections s LEFT JOIN
     sections_multimedia sm
     ON s.id = sm.section_id
GROUP BY s.id
ORDER BY s.id ASC;