まず、Group
を使用しないでください 列名として。これは、すべての SQL 標準の予約語です。名前を grp
に変更しました
'2012-06-01 08:00'
から新しいシフトをスケジュールしようとしています '2012-06-03 08:00'
に ...
INSERT INTO tbl (prim, grp, startdate, enddate) SELECT 1, 10, '2012-06-01 08:00', '2012-06-03 08:00' WHERE NOT EXISTS ( SELECT * FROM tbl WHERE prim = 1 AND grp = 10 AND '2012-06-03 08:00' > startdate -- not >= to allow sharing a border AND '2012-06-01 08:00' < enddate -- and not BETWEEN ... AND either )
プレ>比較することに注意してください:
new_終わり > old_startnew_開始 < old_end
BETWEEN .. AND ..
を使用する場合 テストにシフトの境界を含めます。>=
を使用するのと同じです および<=
.>
を使用する必要があります および<
境界線が重なるようにします。さて、大幅に簡略化された構文を試してみてください。
sqlfiddle で動作するデモがあります。 com