sql - 如何删除记录组
问题描述
我在查询时遇到了一些问题,我不知道如何继续
表结构
create table event(
evn_id int identity(1,1),
name varchar(90)
)
create table eventdate(
evd_id int identity(1,1),
evd_evn_id int references event(evn_id),
evd_start smalldatetime,
evd_end smalldatetime null,
evd_picked bit,
)
测试数据
Insert into eventdate
VALUES('1','1','2018-08-28 09:00:00','NULL','1'),
('1','2','2018-04-26 09:00:00','NULL','0'),
('1','3','2018-02-25 09:00:00','NULL','0'),
('2','4','2018-03-26 15:00:00','NULL','1'),
('2','5','2018-04-25 09:00:00','NULL','0')
Insert into event
VALUES('1','test'),
('2','test')
每个事件可以有 1 个或多个事件日期,一个事件日期有 1 个事件
我有以下内容,它给了我一个包含 1 或 0 个选择日期的事件日期列表
SELECT *
FROM eventdate
WHERE evd_evn_id IN(
SELECT evd_evn_id
FROM eventdate
GROUP BY evd_evn_id
HAVING COUNT(CASE WHEN evd_picked = 1 then 1 else null end) <= 1)
ORDER BY evd_evn_id
我现在要做的是删除每个 evd_evn_id 的所有记录,如果 evd_evn_id 的日期是之前创建的选取日期(evd_picked = 1),例如“20180613”
它应该返回的是
'2','4','2018-03-26 15:00:00','NULL','1'
'2','5','2018-04-25 09:00:00','NULL','0'
解决方案
因此,如果我理解您的问题,如果已选择任何事件日期并且开始日期在“20180613”之前,则您需要事件日期表中的所有记录。
我从您预期的结果中假设这一点。我会使用以下内容:
SELECT *
FROM eventdate
WHERE evd_id in(
select evd_id from eventdate WHERE evd_start < '2018-06-13' and evd_picked = 1)
删除:
DELETE FROM eventdate
WHERE evd_id in(
select evd_id from eventdate WHERE evd_start < '2018-06-13' and evd_picked = 1)
推荐阅读
- javascript - 如何在 JS 或 jQuery 中获取附加元素的值?
- python - Python3中过滤后的wav文件的RMS值
- azure-ad-b2c - 缓解来自外部 IdP 的声明可以是 string 或 stringCollection 的场景
- sql - 如何在sql中加入同一张表的两个子集(由一个组变量定义)
- java - 如何通过自定义 aspectJ 注释传入操作以对方法参数进行操作?
- android - 实施 Exoplayer 分析和 PlaybackStats
- javascript - 使用 javascript/jquery 以模态显示数据
- javascript - 向对象Javascript中的现有键添加值
- python-3.x - 尝试使用 discord.py 给某人起昵称时出现错误消息
- docker-compose - Docker-Compose,如何在 docker-compose 容器之间进行远程登录?