2017-05-31 28 views
1

我有1個SQL命令從2個不同的表中選擇數據。具有GROUP_CONCAT和空值的SQL命令

第一個表是「部分」(ID,標題,文本)和第二個表是「sections_multimedia」(ID,SECTION_ID,文件名)

我使用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_multimedia」 經由 「sections_multimedia」 表中的 「SECTION_ID」 字段連接。

上述SQL命令完美工作,唯一的問題是: 當「sections」表中的某行在表「sections_multimedia」中沒有任何內容時,它不會顯示在結果中。

無論在「sections_multimedia」表中有沒有任何數據,我可以如何從表格「節」中獲取所有數據?

謝謝!

回答

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; 
+0

謝謝戈登!像魅力一樣工作!我希望這個命令能快速進行,在「章節」中有4.000個條目,每個條目中大約有10張照片! – Nick