sql - 获取所有具有选定配件的车辆
问题描述
车辆(PK=v_id)和附件(PK=a_id)之间存在多对多的关系。有一个桥接表vehicles_accessories(PK=v_id,a_id)。
网页上的客户可以选择车辆必须具有的所需配件,并且查询应仅选择具有所有这些配件的车辆。选择的附件数量是可变的。客户可以选择 2 个配件,其他时候可以选择 4 个,等等。
我的 SQL 查询如下所示:
select * from vehicles where v_id in
(
select v.v_id
from vehicles v
join vehicle_accessories va on va.v_id=v.v_id
where va.a_id in (32,34)
group by v.v_id
having count(*)=2
)
在页面上,我收集客户选择的配件并将它们放在 IN 子句中,其中 HAVING COUNT(*)=# of selected Accessories。
有更好的方法吗?
解决方案
您的加入太多:
select v.*
from vehicles v
where v.v_id in (select va.v_id
from vehicle_accessories va
where va.a_id in (32, 34)
group by va.v_id
having count(*) = 2
);
在某些数据库中,使用join
or可能会更快not exists
,但这取决于特定的数据库。
推荐阅读
- python - 使用 Python 访问 .zip 文件中的 .mdb 数据库
- javascript - CSS,浮动无限滚动绘制
- php - Laravel 5.6 与社交名流登录 facebook
- javascript - 定义一个使用 Javascript 的自定义标签,向它发送一些参数
- python - 有没有可能使用python从pdf中导出xml数据的方法
- spring-boot - 消费者为零后,rabbit-mq 队列未自动删除
- jmeter - JMeter:如何加载在负载测试期间不可用的测试直播视频
- javascript - onClick - 从另一个文件调用函数
- jenkins - 如何在 Jenkins 上向用户发布环境仪表板
- javascript - 如何在乘法表上删除Child