日期:2014-05-17  浏览次数:20645 次

问一个数据库查询的问题
我现在有两张表,他们靠pid进行连接,比如:
A表                         
pid    x1    x2   x3
1      a1    b1   c1
2      a2    b2   c2
3      a3    b3   c3
4      ……

B表
pid    x4
1      d1
1      d2
1      d3
2      e1
2      e2
2      e3
2      e4
2      e5
3      f1
……

我现在想快速取出这样的形式:
1    a1    b1    c1    d1    d2    d3
2    a2    b2    c2    e1    e2    e3    e4    e5
3    a3    b3    c3    f1    ……

我原本是想直接进行连接,但是他对于同一个pid生成的不是一条而是多条数据,其中每条数据A表的部分都是重复的,和我的想法不一样。比如:
1    a1    b1    c1    d1
1    a1    b1    c1    d2
1    a1    b1    c1    d3
2    a2    b2    c2    e1
……

后来我改成了另一种形式,先分别取出两个列表listA和listB,然后用两个嵌套循环,每输出一条listA,就查一遍listB,如果A.pid和B.pid相等时,再进行输出。这种虽然实现了我的想法,但太低效了,实在无法忍受。不知道有没有什么更好的办法?

------解决方案--------------------
select pid,x1,x2,x3,
(select GROUP_CONCAT(x4 SEPARATOR ' ') from B表 where pid=A表.pid)
from A表