2012-08-31 53 views
7

我很难建立三连接查询。MySQL三连接

我有三个表:

楼:

house ID(key) | Address | personID | 

人:

personID (key) | Name | Address | 

图片: //房子

imageID (key) | personID | url | 

我想将结果限制为。

我想查询房屋地址(主),它的所有者名称&地址,和一个所有者的图片。

注意:每个人最多有3张图像(图像表中有3行),但只有一张是必要的,无论哪一张都不重要。

+2

一个人可以是多个房屋所有者?一个人行只包含一个房子ID?! 这将如何实现? – TheHe

+1

从person中删除house_id列,而是向house表中添加owner_id列,或者更好地,使用owner_id,house_id列创建owner_house表。 – Icarus

+0

@他是我的错,对不起,我修好了。 –

回答

19
SELECT h.Address, p.Name, p.Address as OwnerAddress, i.url FROM house AS h 
INNER JOIN person AS p ON p.personID = h.personID 
INNER JOIN images AS i ON i.personID = p.personID 
GROUP BY h.houseID 

应该为你工作。

+0

谢谢你的帮助:) –

2

也许最好让你使用LEFT OUTER JOIN,类似

SELECT 
    h.Address as `h_address`, 
    p.Name  as `p_name`, 
    p.Address as `p_address`, 
    i.url  as `i_url` 
FROM house AS `h` 
    LEFT OUTER JOIN person AS `p` ON (p.personID = h.personID) 
    LEFT OUTER JOIN images AS `i` ON (p.personID = i.personID) 
GROUP BY h.houseID 

它将与没有注册的图像也显示房屋。

-1

连接三个表

即:

select i_f.*, i_f_d.* , i_f_c.creator_name 
    from indent_form i_f 
    join indent_form_details i_f_d on i_f.id=i_f_d.ind_id 
    join indent_form_creator i_f_c on i_f.user_id=i_f_c.id 

indent_form table 1, 
indent_form_details table 2, 
indent_form_creator table 3,