我有一個由這些屬性組成的預訂表: Booking(ID, checkIn, checkOut)
- ID bigint 非空,
- 簽入時間戳(0)不為空,
- 簽出時間戳(0)不為空,
- 主鍵(ID)
timestamp(0) 資料型別是這樣的:'2022-12-31 23:59:59'。
我需要創建一個 INSERT 查詢,在插入之前檢查它是否不存在與這些簽入/簽出日期重疊的另一個查詢。
例如,我的資料庫中已經有這個元組: (1, '2022-12-03 23:59:59', '2022-12-07 23:59:59')
如果我插入這個元組 (2, '2022-12-04 23:59:59', '2022-12-06 23:59:59') 資料庫沒有問題,因為 ID 是唯一的,但我不能在 12/04 - 12/06 的迭代中有兩次預訂
此運算式檢查兩個區間是否不重疊 (checkIn1 <= checkOut2) 和 (checkOut1 >= checkIn2)
我正在使用 PostgreSQL。
非常感謝????
uj5u.com熱心網友回復:
您可以創建一個臨時表并首先在該表中輸入資料或行。
CREATE TABLE Table2
(ID bigint PRIMARY KEY,
checkin timestamp(0) NOT NULL,
checkout timestamp(0) NOT NULL);
INSERT INTO Table2
(ID, checkin, checkout)
VALUES
(2, '2022-12-04 23:59:59', '2022-12-06 23:59:59'),
(3, '2022-12-08 23:59:59', '2022-12-09 23:59:59');
現在您可以使用該表將資料插入到原始表中,使用JOIN子句:
INSERT INTO Booking (id, checkin, checkout)
SELECT t2.*
FROM Table2 t2
LEFT JOIN Booking t3
ON t2.id <> t3.id AND (t3.checkin > t2.checkout OR t3.checkout < t2.checkin)
WHERE t3.id IS NOT NULL;

更多關于這里的約束
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/485561.html
