2012-03-18 62 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)