gpt4 book ai didi

SQL 不存在(在 (...) 和 (...) 之间)

转载 作者:行者123 更新时间:2023-11-29 14:10:15 25 4
gpt4 key购买 nike

我正在创建一个用于预订酒店房间的数据库。我坚持检查 guest 的“dateFrom”变量是否在该特定 guest 的任何“dateFrom”和“dateTo”变量之间的约束。即)客人一次不能预订超过 1 间客房。

我收到一个错误:“不能在检查约束中使用子查询”:

CREATE TABLE tomsBooking 
(
hotelNo HotelNo NOT NULL,
guestNo INT NOT NULL,
dateFrom DATE NOT NULL,
dateTo DATE NOT NULL,
roomNo RoomNumber

CONSTRAINT GuestOverlap
CHECK ( NOT EXISTS
(SELECT * FROM tomsBooking b
WHERE b.guestNo = b.guestNo
AND b.dateTo >= dateFrom
AND b.dateFrom <= dateTo
)
)
);

最佳答案

不幸的是,Postgres 不支持检查约束的子查询。

但这种情况正是exclusion constraints在哪里创建:

CREATE TABLE tomsBooking 
(
hotelNo HotelNo NOT NULL,
guestNo INT NOT NULL,
dateFrom DATE NOT NULL,
dateTo DATE NOT NULL,
roomNo RoomNumber
);

alter table tomsbooking
add constraint guestoverlap
exclude using gist (guestno with =, daterange(datefrom, dateto) with &&);

有关更多详细信息和示例,请参阅手册:https://www.postgresql.org/docs/current/static/rangetypes.html#RANGETYPES-CONSTRAINT

为了使 GIST 索引能够使用 = 运算符,您需要安装 btree_gist模块使用:

create extension btree_gist;

(每个数据库只需要做一次)

关于SQL 不存在(在 (...) 和 (...) 之间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40076606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com