0

我有一个数据库(出于此示例的目的),它有两个具有多对多关联的表(带有一个用于保存关联的中间表)。这里有结构:

表 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-* 关系多个记录,按存在于整个集合中的信息

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

您必须执行 2 个内部连接才能组合 3 个表。

于 2013-03-07T13:47:23.210 回答