0

私はデータベースを持っています(この例の目的のために)、多対多の関連付けを持つ2つのテーブルがあります(関連付けを保持するための中間テーブルがあります)。ここに構造があります:

表A:

+-----+-------+-------+-------+
| aID | aCol1 | aCol2 | aCol3 |
+-----+-------+-------+-------+
|  1  |  foo  |  aoo  |  doo  |
+-----+-------+-------+-------+
|  2  |  bar  |  aar  |  dar  |
+-----+-------+-------+-------+
|  3  |  baz  |  aaz  |  daz  |
+-----+-------+-------+-------+

表B:

+-----+-------+
| bID | bCol1 |
+-----+-------+
|  1  | alice |
+-----+-------+
|  2  |  bob  |
+-----+-------+

関連付けテーブル:

+-----+-----+
| aID | bID |
+-----+-----+
|  1  |  1  |
+-----+-----+
|  2  |  2  |
+-----+-----+
|  3  |  1  |
+-----+-----+

aCol2 LIKE'aa%'で情報を検索したいが、行がbCol1 ='bob'に関連付けられている場合(つまり、行aID = 2のみになる)、同様のことを実行できるMySQLクエリをどのように組み立てることができますか?

psわかりにくいので申し訳ありませんが、言い回しは正確にはわかりませんが、簡単に言うと、(この目的のために)接続テーブルを介して1-*の関係にある1つのレコードからデータを検索することです。セット全体に存在する情報による多数のレコード

4

2 に答える 2

2
SELECT
    a.*
FROM
    table_b b
    INNER JOIN associations ab ON (b.b_id = ab.b_id)
    INNER JOIN table_a a ON (ab.a_id = a.a_id)
WHERE
    b.col_1 = 'bob'
    AND a.col_2 LIKE 'aa%'
于 2013-03-07T13:48:42.210 に答える
1

しばらく経ちましたが、これでうまくいくと思います。

SELECT
    *
FROM
    A,
    B,
    associations
WHERE
    A.aCol2 LIKE 'aa%' AND
    A.aID = associations.aID AND
    associations.bID = B.bID

3つのテーブルを結合するには、2つの内部結合を実行する必要があります。

于 2013-03-07T13:47:23.210 に答える