0

我有桌子

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 中做到这一点,或者我必须获取所有行并用编程语言进行过滤操作?

4

1 回答 1

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
于 2013-07-21T03:54:56.417 回答