2016-10-12 3 views
1

hereのフォローアップの質問。私は答えにコメントすることができないので、直接尋ねることはできません。日付が既存のものと重複しない場合、日付の範囲を日付の列に更新します。

行を更新する必要がありますが、時刻が他のエントリと重複していないかどうかを確認する必要があります。しかし、私はチェック中に自分自身を見ることを排除するためにステートメントをどのように変更できるのか分かりません。チェックから更新された行を排除しながら、この

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;   

のようなINSERTステートメントを指定して

は、どのように私は同じことを行うには、私の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

関連する問題