2012-11-20 55 views
4

我有三個表:SQL JOIN使用映射表

COLLECTION 
PERSON 
PERSON_COLLECTION 

其中PERSON_COLLECTION是映射表id|person_id|collection_id

我現在想通過person.name選擇在收集,責令所有條目。

我必須先加入與映射表中的單獨的表,然後做一個對結果再次加入?

+0

你能告訴你的表模式?請更新您的問題。同時指出你在表格之間的任何參照完整性。 – bonCodigo

+0

作爲連接表的一般規則*,開始用最大/數據表,並用自己的方式最小/映射表。另外,在LEFT加入之前執行INNER連接。 *注意:一般規則。 –

回答

5
SELECT 
    c.*, 
    p.Name 
FROM 
    Collection c 
    JOIN Person_Collection pc ON pc.collection_id = c.id 
    JOIN Person p ON p.id = pc.person_id 
ORDER BY p.Name 
+0

完美謝謝!!你是驚人的! :) – user871784

0

您加入的訂單不會破壞它,但取決於您使用的SQL產品可能會影響性能。 你需要決定,如果你想從兩個/於表或僅具有匹配的映射條目記錄的所有記錄,這將改變的加入,你需要使用的類型。

0

不知道不表模式,但是,我的看法是:

SELECT 
c.*, 
p.* 

FROM 
Person_Collection pc 
LEFT JOIN Collection c 
ON pc.collection_id = c.id 
LEFT JOIN Person p 
ON pc.person_id = p.id 

ORDER BY p.name