【发布时间】:2016-05-27 00:25:17
【问题描述】:
我想创建一个向表中插入数据并检查我的日期范围是否与现有日期范围重叠的查询。
我创建了以下工作查询,但它插入了 2 行具有相同数据的行。你能发现其中有什么不对吗?
INSERT INTO infoscreen_times (screen_id, start, end, view_id)
SELECT ?, ?, ?, ?
FROM infoscreen_screens
WHERE EXISTS (
SELECT id
FROM infoscreen_times
WHERE ? BETWEEN start AND end
AND screen_id = ?
OR ? BETWEEN start AND end
AND screen_id = ?
OR ? <= start
AND ? >= end
AND screen_id = ?) IS FALSE
start 表示 Start-Timestamp,end 表示 End-Timestamp。在子查询中,我想检查我要插入的时间戳是否相互重叠。如果他们这样做,我想得到一个错误,如果他们不查询插入数据。
提前致谢。
【问题讨论】:
-
您正在混合
and和or而没有任何()来强制解析顺序。这几乎总是一个错误的迹象。 -
我认为最好使用编程语言来调节您的查询