2013-07-21 37 views
0

创建的所有行我有表MySQL的:其中至少有一个属性是属于

a (id INT, name VARCHAR(100)) 
b (id INT, name VARCHAR(100)) 
a_b (a INT, b INT) 

我想建立一个查询来获取所有的B的地方a.name等于“鲍勃”,但也包括所有与a.name一样的b.id具有相同的b.id。

例如,

a:    b:     a_b: 
id | name   id | name   a | b 
_________________ _________________ _________ 
1 | 'bob'   1 | 'dark'  1 | 1 
2 | 'tony'  2 | 'light'  1 | 2 
3 | 'steve'  3 | 'neg'   2 | 1 
4 | 'elon'  4 | 'elon'  3 | 1 

所以,我需要所有B与a.name = '鲍勃'

SELECT * FROM a_b 
JOIN a ON a.id = a_b.a 
JOIN b ON b.id = a_b.b 
WHERE a.name = 'bob' 

这得到了当b.id = 1和2,但该行当b.id相同时,我也想要所有的a.names。理想情况下,我希望它返回

a's 1,2,3. b:1 
a's 1 b: 2 

因此,所有的B的其中一个的name属性中的至少一个等于“鲍勃” 有没有办法在SQL做到这一点,或者我会得到所有行和编程语言中的过滤操作?

回答

0

这应该加入回a_b表,并使用GROUP_CONCAT

SELECT b.id, group_concat(c.a) a 
FROM a_b 
    JOIN a ON a.id = a_b.a 
    JOIN b ON b.id = a_b.b 
    JOIN a_b c on b.id = c.b 
WHERE a.name = 'bob' 
GROUP BY b.id 
相关问题