执行多对多关系的搜索

时间:2013-03-07 13:43:49

标签: php mysql many-to-many relationship

我有一个数据库(为了这个例子的目的),有两个具有多对多关联的表(带有用于保存关联的中间表)。这是结构:

表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查询类似的东西?

P.S。很抱歉清晰度差,我不完全确定措辞,但在坚果壳中,它是关于从一个记录中搜索数据(为此目的)通过连接表与一个1- *关系记录数,按整个集合中存在的信息

2 个答案:

答案 0 :(得分: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%'

答案 1 :(得分:1)

已经有一段时间了,但我相信这应该有效:

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

你必须做2个内连接来组合3个表。