2016-10-31 25 views
0

我有加入表的查詢:MySQL的 - 加入三個表和顯示數據(即使沒有發現匹配)

  1. 特色{ID,名稱,描述,圖片}
  2. 醫生{ID,名稱,描述,照片}
  3. doc_spec {ID,id_doc,id_spec}

    SELECT 
        d.id, 
        d.name, 
        d.description, 
        d.photo, 
        GROUP_CONCAT(s.name SEPARATOR ', ') AS 'specialty' 
    FROM 
        doc_spec ds 
    INNER JOIN 
        doctors d 
    ON 
        ds.id_doc=d.id 
    INNER JOIN 
        specialties s 
    ON 
        ds.id_spec=s.id 
    GROUP BY 
        d.id 
    

查詢完美地工作,從兩個表中檢索數據使用doc_spec表,連接其他兩個但問題是當我有一個醫生,但有一個指定的專業。

我該怎麼做,以便在doc_spec表上沒有匹配時不顯示該行,而是在專業列上檢索該行的NULL值?如果可能,而不是顯示爲空,如果它可以保存「沒有專業指定」的值的話,那將是完美的。

UPDATE

我找到了一種方法,通過使用RIGHT JOIN和LEFT JOIN,但我不知道這是否是這樣做的正確的路,我仍然希望能夠堅持做像「沒有指定專業」而不是null的值。

SELECT 
     d.id, 
     d.name, 
     d.description, 
     d.photo, 
     GROUP_CONCAT(s.name SEPARATOR ', ') AS 'specialty' 
    FROM 
     doc_spec ds 
    RIGHT JOIN 
     doctors d 
    ON 
     ds.id_doc=d.id 
    LEFT JOIN 
     specialties s 
    ON 
     ds.id_spec=s.id 
    GROUP BY 
     d.id 
+1

您是否嘗試過的,而不是一個'INNER JOIN'一個'LEFT OUTER JOIN'? – smdrager

+0

只適用**左**不適用,但如果適用**如果我同時使用**右**和**左**,謝謝 –

+0

啊,是的,沒有看到你以'doc_specs'開頭。很好。 – smdrager

回答

0

我想這應該做的伎倆:

SELECT 
    d.id, 
    d.name, 
    d.description, 
    d.photo, 
    IFNULL(GROUP_CONCAT(s.name SEPARATOR ', '), 'No specialities') AS 'specialty' 
FROM 
    doc_spec ds 
RIGHT JOIN 
    doctors d 
ON 
    ds.id_doc=d.id 
LEFT JOIN 
    specialities s 
ON 
    ds.id_spec=s.id 
GROUP BY 
    d.id 
+0

爲什麼是-1?你能告訴我嗎? – Vookash

+0

你好,@vookash,它工作完美,這正是我所期待的。謝謝。至於-1是**不是**我。 –

+0

我很高興我可以幫助:) – Vookash

相關問題