首页 > 解决方案 > Postgres:根据关系表上的几个子句从表中选择数据

问题描述

假设我们有两个表:

person (
    id int,
    name varchar,
    surname varchar
)

vehicle (
    id int,
    make varchar,
    model varchar,
    has_gps boolean,
    has_ac boolean
    person_id
)

我想选择所有至少拥有一辆车具有 GPS (has_gps = true) 和至少一辆车具有 AC (has_ac = true) 的人。

所以基本上人必须至少有 2 辆车,但必须至少有一辆有 GPS 的车辆和至少一辆有 AC 的车辆。

我尝试过存在,但我似乎无法弄清楚如何在 postgres 中做到这一点。

例如:

Person (1, 'Michael', 'Jordan')
Person (2, 'Leo', 'Messi')

Vehicle (1, 'bmw', 'x5', true, false, 1)
Vehicle (2, 'ferrari', 'testarossa', false, true, 1)
Vehicle (3, 'mercedes', 's class', true, true, 2)

在结果中,我应该只得到 ID 为 1 的人,因为它至少有一辆带​​ gps 的车辆和至少一辆带 ac 的车辆。

标签: sqlpostgresql

解决方案


就像是 :

select person_id from vehicle
group by person_id
having
count(case when has_gps then 1 end ) > 0
and
count(case when has_ac then 1 end ) > 0
and
count(*) > 1

?


推荐阅读