MySQL:创建至少有一个属性所属的所有行

时间:2013-07-21 03:30:56

标签: mysql sql join relational-database

我有桌子

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

我想构造一个查询来获取a.name等于'bob'的所有b,但也包括与a.name中找到的b.ids具有相同b.id的所有a。 / p>

例如,

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 ='bob'

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的至少有一个a的name属性等于'bob' 有没有办法在SQL中执行此操作,或者我是否必须获取所有行并使用编程语言执行过滤操作?

1 个答案:

答案 0 :(得分: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