我有桌子
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.id 具有相同 b.id 的所有 a。
例如,
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
所以,我需要所有带有 a.name = 'bob' 的 b
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 中做到这一点,或者我必须获取所有行并用编程语言进行过滤操作?