mysql连接表而不显示重复数据

时间:2013-11-16 17:36:49

标签: mysql select join left-join inner-join

我想从我的表revistas中选择所有数据,并从其他表中选择匹配的值而不重复数据。

这是我的数据库的图像 https://dl.dropboxusercontent.com/u/31988662/a.png

我想完全按照以下方式导出数据,所有idrevistas都包含来自其他表格的所有匹配ID

idrevistas  idsentido_efeito   idamostra       idnatureza_efeito  idfatores_afeta_efeito
---------------------------------------------------------------------------------
  1              1                1,2,3              1                   1
  2              2                2                  2                   2
  3              1                2,3                1,2                 2
  4              2                1,2                4,5                 2,1

我能得到的最接近的是这样一个简单的连接:

SELECT rev.nome_revistas,se.nome_sentido_efeito, rev.titulo_revistas, rev.subtitulo_revistas_autor_ano, rev.abstract, group_concat(ams.nome_amostra),se.nome_sentido_efeito,group_concat(ne.nome_natureza_efeito),  fae.nome_fatores_afeta_efeito
FROM revistas_has_amostra as rha
JOIN revistas as rev ON rha.revistas_idrevistas = rev.idrevistas
JOIN amostra as ams ON rha.amostra_idamostra = ams.idamostra
JOIN sentido_efeito as se ON rev.sentido_efeito_id = se.idsentido_efeito
JOIN revistas_has_natureza_efeito as rhne ON rev.idrevistas = rhne.revistas_idrevistas
JOIN natureza_efeito as ne ON rhne.natureza_efeito_idnatureza_efeito = ne.idnatureza_efeito
JOIN revistas_has_fatores_afeta_efeito as rhfae ON rev.idrevistas = rhfae.revistas_idrevistas
JOIN fatores_afeta_efeito as fae ON rhfae.fatores_afeta_efeito_idfatores_afeta_efeito = fae.idfatores_afeta_efeito
GROUP BY rev.idrevistas

但是这会多次返回amostra_id表中的匹配

idrevistas  idsentido_efeito       idamostra       idnatureza_efeito  id_fatores_afet..
-----------------------------------------------------------------------------------
   1              1                1,2,3,1,2,3,1,2,3    1,1,1             1
   2              2                2                    2                 2
   3              1                2,3,2,3              1,2,1,2           2
   4              2                1,2,1,2              4,5,4,5           2,1

2 个答案:

答案 0 :(得分:0)

只需添加GROUP BY amostra_id?

GROUP BY rev.idrevistas, rev.amostra_id

答案 1 :(得分:0)

尝试将DISTINCT添加到所有GROUP_CONCAT

SELECT rev.nome_revistas
    ,se.nome_sentido_efeito
    ,rev.titulo_revistas
    ,rev.subtitulo_revistas_autor_ano
    ,rev.abstract
    ,GROUP_CONCAT(DISTINCT ams.nome_amostra)
    ,se.nome_sentido_efeito
    ,GROUP_CONCAT(DISTINCT ne.nome_natureza_efeito)
    ,fae.nome_fatores_afeta_efeito
FROM ...