2016-10-31 22 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

相关问题