我有桌子
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中执行此操作,或者我是否必须获取所有行并使用编程语言执行过滤操作?
答案 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