sql - 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 的车辆。
解决方案
就像是 :
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
?
推荐阅读
- java - Java,应该交互的两个不同的图形组件
- animation - Transfer-origin 似乎在 safari 上的 SVG 中无法解决 safari 中的缩放或缩放问题
- java - 如何在 Grails 中进行分页?
- excel - 自动化两个 Excel 工作簿之间的数据连接的最佳方法是什么?
- xamarin.android - 将 MvvmCross 5.0 迁移到 6.0
- php - 如何从codeigniter中的url获取控制器名称?
- spring-boot - 如何在spring boot webFlux中为特定用户实现服务器发送事件
- oop - SAP PS Project 对象深拷贝的设计类
- angular - 如何在Angular 7路由中将字符/更改为=?
- android - 在 GoogleMap 中旋转两层标记图标