2013-03-07 56 views
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 Query tha t可以做類似的事情嗎?

p.s.對不起,我不太清楚,我不完全確定的措辭,但在堅果外殼,它是關於從一個記錄搜索數據(爲此目的)有一個1 *關係通過連接表到一個記錄數,由存在於整個信息設置

+0

雖然我知道這很容易通過對相關數據的每個找到的記錄進行搜索做了,那麼如果結果行是不正確的,它會從找到行的數組中刪除它,但我我試圖避免N + 1查詢選擇問題 – topherg 2013-03-07 13:47:26

回答

1

它已經一段時間,但我相信這應該工作:

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

你要做2內連接到3個表結合起來。

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%'