答案的后续问题here。由于我不能对答案发表评论,我不能直接问。
我需要更新一行并仍然检查时间是否与其他条目重叠。但是,我不知道如何更改语句以排除在检查期间查看自身。
使用像这样的Insert语句
INSERT INTO table (name, starttime, endtime)
SELECT 'test', '2016-10-12 22:00:00', '2016-10-12 23:00:00'
FROM (SELECT 1) x
LEFT
JOIN table y
ON y.starttime < '2016-10-12 23:00:00' AND y.endtime > '2016-10-12 22:00:00'
WHERE y.id is NULL LIMIT 1;
如何在检查中排除正在更新的行时,如何修改UPDATE语句以执行相同操作?
UPDATE table SET name = 'test2', starttime = '2016-10-12 22:15:00',
endtime = '2016-10-12 23:00:00' WHERE id = 1
id是主键,我用它来识别行
答案 0 :(得分:1)
您可以在not exists
和insert
查询中使用update
:
insert into a_table (name, starttime, endtime)
select 'test', '2016-10-12 22:00:00', '2016-10-12 23:00:00'
where not exists (
select 1 from a_table
where starttime < '2016-10-12 23:00:00' and endtime > '2016-10-12 22:00:00'
);
update a_table
set name = 'test2', starttime = '2016-10-12 22:15:00', endtime = '2016-10-12 23:00:00'
where id = 1
and not exists (
select 1 from a_table
where id <> 1
and starttime < '2016-10-12 23:00:00' and endtime > '2016-10-12 22:15:00'
);