MySQL:创建至少一个属性所属的所有行
我有桌子MySQL:创建至少一个属性所属的所有行,mysql,sql,join,relational-database,Mysql,Sql,Join,Relational Database,我有桌子 a (id INT, name VARCHAR(100)) b (id INT, name VARCHAR(100)) a_b (a INT, b INT) 我想构造一个查询来获取所有的b,其中a.name等于'bob',但也包括所有与使用a.name找到的b.id具有相同b.id的a 比如说, a: b: a_b: id | name id | name a | b _________
a (id INT, name VARCHAR(100))
b (id INT, name VARCHAR(100))
a_b (a INT, b INT)
我想构造一个查询来获取所有的b,其中a.name等于'bob',但也包括所有与使用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
所以,我需要所有的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.name。理想情况下,我希望它能回来
a's 1,2,3. b:1
a's 1 b: 2
所以所有的b中,至少有一个a的name属性等于'bob'
在SQL中有什么方法可以做到这一点,或者我必须获取所有行并用编程语言执行过滤操作吗?这应该可以连接回
a\u b
表并使用GROUP\u 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