Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:创建至少一个属性所属的所有行_Mysql_Sql_Join_Relational Database - Fatal编程技术网

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