我正在尝试为建筑物及其所有信息设置架构。
因为建筑物的区域数量可能会有所不同,所以我将这些区域存储在一个表格中,区域", 其中每个区域都有一个指向其所属建筑物主键的外键。
我想要的是尝试在一行上获取建筑物的所有信息,如:
--------------------------------------------------------------------
id | address | owner | area 1 | area 2 | area 3 |
--------------------------------------------------------------------
1 | 21 kingsbridge st | claudia | kitchen | bathroom | garage|
--------------------------------------------------------------------
使用LEFT JOIN
我可以获取信息,而不是格式为Im after
我在这里设置了一个架构 http://www.sqlfiddle.com/#!9/83558/6
希望有一个像GROUP BY之类的聚合函数这样的查询? 这有可能吗?
答案 0 :(得分:1)
select x.pId, x.address, x.owner,
max(x.area1) A1, max(x.area2) A2,max(x.area3) A3,max(x.area4) A4,max(x.area5) A5
from
(
SELECT p.id pId, p.address, p.owner, a.id aId, a.property_id, a.area_name,
case when a.area_name = 'kitchen' then a.area_name else null end as area1,
case when a.area_name = 'garage' then a.area_name else null end as area2,
case when a.area_name = 'checkout' then a.area_name else null end as area3,
case when a.area_name = 'booths' then a.area_name else null end as area4,
case when a.area_name = 'bathroom' then a.area_name else null end as area5
FROM properties p
LEFT JOIN areas a
ON p.id = a.property_id
) as X
GROUP BY pId, x.address, x.owner
但你需要知道什么是不同的区域。