我有三個表:SQL JOIN使用映射表
COLLECTION
PERSON
PERSON_COLLECTION
其中PERSON_COLLECTION
是映射表id|person_id|collection_id
我現在想通過person.name
選擇在收集,責令所有條目。
我必須先加入與映射表中的單獨的表,然後做一個對結果再次加入?
我有三個表:SQL JOIN使用映射表
COLLECTION
PERSON
PERSON_COLLECTION
其中PERSON_COLLECTION
是映射表id|person_id|collection_id
我現在想通過person.name
選擇在收集,責令所有條目。
我必須先加入與映射表中的單獨的表,然後做一個對結果再次加入?
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
完美謝謝!!你是驚人的! :) – user871784
您加入的訂單不會破壞它,但取決於您使用的SQL產品可能會影響性能。 你需要決定,如果你想從兩個/於表或僅具有匹配的映射條目記錄的所有記錄,這將改變的加入,你需要使用的類型。
不知道不表模式,但是,我的看法是:
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
你能告訴你的表模式?請更新您的問題。同時指出你在表格之間的任何參照完整性。 – bonCodigo
作爲連接表的一般規則*,開始用最大/數據表,並用自己的方式最小/映射表。另外,在LEFT加入之前執行INNER連接。 *注意:一般規則。 –