2016-10-12 109 views
1

後續問題回答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

?你們都有標籤。 – Nicarus

+0

對不起,postgreSQL – Chanpuru

回答

1

中都可以insertupdate查詢使用not exists:你使用MySQL或PostgreSQL

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' 
    ); 
+0

兩個工作完美無瑕!謝謝你的幫助。 SQL語法對我來說是比較新的。 – Chanpuru