我有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”表中是否有任何数据,我该如何从表“部分”中获取所有数据?
谢谢!
答案 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;