【问题标题】:mysql joining tables without show duplicate datamysql加入表而不显示重复数据
【发布时间】:2013-11-30 01:16:51
【问题描述】:

我想从我的表 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

【问题讨论】:

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


    【解决方案1】:

    尝试将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 ...
    

    【讨论】:

      【解决方案2】:

      只需添加 GROUP BY amostra_id?

      GROUP BY rev.idrevistas, rev.amostra_id
      

      【讨论】:

      • 我已经尝试添加 GROUP BY rev.idrevistas, ams.amostra_id 并没有生效。谢谢你的回答
      猜你喜欢
      • 1970-01-01
      • 2014-01-20
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      相关资源
      最近更新 更多