【问题标题】:sql left join and duplicates in resultsql左连接并在结果中重复
【发布时间】:2009-02-07 09:30:27
【问题描述】:

假设我有 2 个表,A 和 B,每个 A 实体可能有多个 B 实体,在一种情况下,如果我想获得某些 A 的所有 B,我可以通过简单的左连接来完成

select A.id aid,B.id bid from A
left join B on B.aid = A.id
where A.id = 1

它会返回一个类似

的结果集
aid   bid
1     1
1     2
1     3

正如您在第一列中看到的那样,所有这些 1 都是重复的。是否可以修改SQL语句让他返回类似的结果

aid    bid
 1      1,2,3

换句话说,将所有投标作为一个实体链接在一起?

另外如果有另一个表C,并且每个A可以有多个C,我如何让SQL返回一个类似的结果集

 aid    bid    cid
  1     1,2,3   1,2

而不是

 aid     bid    cid
  1       1      1
  1       2      1
  1       3      1
  1       1      2
  1       2      2
  1       3      2 

非常感谢!

【问题讨论】:

    标签: sql join


    【解决方案1】:

    您使用的是什么 DBMS?

    我不能替别人说话,但是在 MySQL 中,从 4.1 开始,你可以使用 GROUP_CONCAT

    http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

    EG:

    select A.id aid, GROUP_CONCAT(DISTINCT B.id) bid from A
    left join B on B.aid = A.id
    where A.id = 1
    GROUP BY a.id
    

    【讨论】:

    • 我不认为它有任何性能问题在这种类型的查询中已经不存在。
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多