MySQL连接 - 获取3个表中的所有数据

时间:2011-02-10 02:26:28

标签: mysql join

我试图一次从三个不同的表中获取数据,我不认为我非常理解加入正确,因为我无法快速。 例如,假设表格为housessellersselling_detailshousessellersselling_details链接:它有seller_idhouse_id,还有更多信息,例如价格和指向用户的链接

我想构建一个返回系统中所有房屋的查询,与所有卖家匹配,并列出销售详情(如果有)。例如:

+------------+-------------+-------------------------+----------------------+-----------+
| house.name | seller.name | selling_details.details | selling_details.date | user.name |
+------------+-------------+-------------------------+----------------------+-----------+
| One        | One         | details                 | 2011-02-18           | bobby     |
| One        | Two         | details                 | 2011-02-24           | frank     |
| One        | Three       | NULL                    | NULL                 | NULL      |
| One        | Four        | NULL                    | NULL                 | NULL      |
| Two        | One         | details                 | 2011-01-16           | ned       |
| Two        | Two         | NULL                    | NULL                 | NULL      |
| Two        | Three       | details                 | 2011-02-12           | will      |
| Two        | Four        | NULL                    | NULL                 | NULL      |
+------------+-------------+-------------------------+----------------------+-----------+

最简单的方法是什么?

编辑:我似乎试图过度简化问题,所以这里有更多细节:

这是我正在使用的架构的一小部分:

create table `house` (`id` int not null auto_increment, `name` varchar(255) null, primary key (`id`))
create table `seller` (`id` int not null auto_increment, `name` varchar(255) null, primary key (`id`))
create table `user` (`id` int not null auto_increment, `name` varchar(255) null, primary key (`id`))
create table `selling_details` (`id` int not null auto_increment, `details` varchar(255) not null, date datetime not null, `house_id` int null, `seller_id` int null, `user_id` int not null, primary key (`id`))

alter table `selling_details` add index `FK_selling_details_user` (`user_id`), add constraint `FK_selling_details_user` foreign key (`user_id`) references `user` (`id`)
alter table `selling_details` add index `FK_selling_details_house` (`house_id`), add constraint `FK_selling_details_house` foreign key (`house_id`) references `house` (`id`)
alter table `selling_details` add index `FK_selling_details_seller` (`seller_id`), add constraint `FK_selling_details_seller` foreign key (`seller_id`) references `seller` (`id`)

现在,为了使事情变得非常复杂,selling_details表格中可能会有很多行链接houseseller。如果存在一个或多个这些行,我只想要一个具有最新date的行;如果没有这样的行,仍然按照上面的示例结果返回房屋和卖家组合。

1 个答案:

答案 0 :(得分:0)

交叉加入房屋和卖家,然后离开加入以查找组合的任何细节

select h.house_id, s.seller_id, sd.details
from houses h
cross join sellers s
left join selling_details sd
    on sd.seller_id = s.seller_id
    and sd.house_id = h.house_id
order by h.house_id, s.seller_id