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

したがって、a の name 属性の少なくとも 1 つが 'bob' に等しいすべての b は、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 に答える