1

我在使用 LEFT JOIN 和 GROUP BY 组合具有一对多映射的表时遇到问题。

我有下表具有唯一 ID(在说明性示例中,这是 house_number)

房屋:

|house_number| bedrooms|
|0           | 4       |
|1           | 3       |
|2           | 1       |

而且我想使用唯一 ID 与第二个表进行 LEFT JOIN,其中第二个表可能有也可能没有每个唯一 ID 的多个条目。例如,

住户:

| 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.

如果我只使用 a WHERE (type = 20),那么我不会得到 house_number = 1 的返回条目。

我将如何进入决赛桌?

4

2 回答 2

2

那么尝试WHERE (type = 20 OR type is null)条件呢?

于 2012-06-14T11:01:57.433 回答
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
        ;

顺便说一句,我不得不将“type”替换为“ztype”,因为 type 是 Postgres 中的保留字。

于 2012-06-14T11:14:59.487 回答