我在使用LEFT JOIN和GROUP BY组合具有一对多映射的表时遇到了问题。
我有下表带有唯一ID(在说明性示例中,这是house_number)
房屋:
|house_number| bedrooms|
|0 | 4 |
|1 | 3 |
|2 | 1 |
我想要使用唯一ID来使用第二个表来LEFT JOIN,其中第二个表可能有也可能没有每个唯一ID的多个条目。 E.g,
乘员:
| house_number | occupant_id | type |
| 0 | 3 | 19 |
| 0 | 1 | 20 |
| 0 | 2 | 21 |
| 2 | 7 | 20 |
现在我想要实现的是每个门牌号码只有一个条目,但是在LEFT JOIN中优先考虑类型为20的占用者,同时还保留那些没有列出任何占用者的房屋,例如
|house_number| bedrooms| occupant_id | type |
|0 | 4 | 1 | 20 |
|1 | 3 | null | null |
|2 | 1 | 7 | 20 |
我可以使用GROUP BY来实现每个房子只有一个条目,但是,我需要确保随其返回的占用者行(如果存在)具有type = 20
。
如果我只使用WHERE (type = 20)
,那么我就不会为house_number = 1返回一个条目。
我如何才能进入决赛桌?
答案 0 :(得分:2)
尝试WHERE (type = 20 OR type is null)
条件呢?
答案 1 :(得分:2)
SELECT h.house_number,h.bedrooms
, o.occupant_id,o.ztype
FROM houses h
LEFT JOIN occupants o ON h.house_number = o.house_number
AND o.ztype =20
;
BTW我必须更换"键入" by" ztype"因为类型是Postgres中的保留字。