2012-03-18 59 views
1

我有3個表:MySQL的加入就三桌

地址

id, address, city, zipcode 

(1500年記錄)

id, address_id, firtname, lastname, sex, title 

建築(100條記錄)

id, address_id, name, type_of_building 

多人/建築物共享相同的地址。我需要列出所有人的地址或建築信息。所以,我的查詢應該返回總共1600條記錄。

我需要寫什麼樣的查詢來檢索這些信息?

回答

3

因爲您需要來自兩個不同數據集的所有記錄,所以需要使用INNER JOINUNION。像這樣的東西可能會奏效:

SELECT p.id, p.firstname, p.lastname, p.sex, p.title, a.address, a.city, a.zipcode 
FROM persons p 
    INNER JOIN addresses a on a.id = p.address_id 

UNION ALL 

SELECT b.id, b.name, '', '', b.type_of_building, a.address, a.city, a.zipcode 
FROM buildings b 
    INNER JOIN addresses a on a.id = b.address_id 
+0

謝謝,這就是我一直在尋找。 – Francois 2012-03-19 02:32:39

0

這將是一個UNION,因爲要合併兩個不同的數據集的結果。爲了得到統一的信息,您需要使用相同的字段,所以我會用樣本:

(SELECT address_id, firstname AS value1, lastname AS value2, sex AS value3, title AS value4 FROM persons) 
    UNION 
(SELECT address_id, name AS value1, type_of_building AS value2, 0 AS value3, 0 AS value4 FROM buildings)