首页 > 解决方案 > SQL 喜欢但不喜欢

问题描述

目前我的脚本有一些问题。

问题是这样的“显示所有参加事件 201504 但未参加事件 201504 的汽车。因此,如果它们未参与事件 01,则不应显示它们。他们目前正在这样做。

我做了如下查询,但无法进一步了解。

select *
from autos a
join deelnemers d on a.autonr = d.autonr
join evenementen e on d.evenementnr = e.evenementnr
where e.evenementnr = '201504'
    and e.evenementnr != '201501'                               
order by bouwjaar desc

标签: sqlsql-servertsqljoin

解决方案


一种选择使用聚合:

select a.bouwjaar
from autos a
join deelnemers d on a.autonr = d.autonr
join evenementen e on d.evenementnr = e.evenementnr
group by a.bouwjaar
having
    count(case when e.evenementnr  = '201504' then 1 end) > 0 and
    count(case when e.evenementnr != '201501' then 1 end) = 0                           
order by a.bouwjaar desc;

这个想法是在聚合模式下运行您的查询,考虑属于给定汽车的每组记录。然后,我们在HAVING子句中断言在 上至少发生了一个事件201504,同时还断言在 上没有发生任何事件201501


推荐阅读