sql左边连接并重复结果

时间:2009-02-07 09:30:27

标签: sql join

假设我有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

正如您在第一列中看到的那样,所有这些都是有点重复。是否可以修改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 

非常感谢!

2 个答案:

答案 0 :(得分:3)

您使用的是什么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

答案 1 :(得分:0)