我要存储
INSERT INTO dining_table_grouping
(layout_id,
dining_table_id,
master_dining_table_id,
start_timestamp,
end_timestamp)
VALUES($1, $2, $3, $4, $5)
仅当Dining_table_id和master_dining_table_id值在Dining_table_id和master_dining_table_id列中均是唯一的时,这仅在其他layout_id,dining_table_id,start_timestamp和end_timestamp不唯一时才适用。
例如:
VALUES(1, 2, 3, 2019-03-13 08:00:00, 2019-03-13 09:00:00)
VALUES(5, 4, 2, 2019-03-13 07:00:00, 2019-03-13 10:00:00)
无法存储,因为在Dining_table_id列中已经存储了2。
我该如何实现?
我的尝试:
INSERT INTO dining_table_grouping(layout_id, dining_table_id, master_dining_table_id, start_timestamp, end_timestamp)
VALUES($1, $2, $3, $4, $5)
WHERE NOT dining_table_id OR master_dining_table_id = $3 AND dining_table_id OR master_dining_table_id = $4
答案 0 :(得分:1)
您可以使用SELECT语句代替VALUES和具有NOT EXISTS的条件:
insert into dining_table_grouping (
layout_id,
dining_table_id,
master_dining_table_id,
start_timestamp,
end_timestamp)
select $1, $2, $3, $4, $5
where not exists (
select 1 from dining_table_grouping
where
(layout_id = $1 and start_timestamp = $4 and end_timestamp = $5)
or dining_table_id in ($2, $3) or master_dining_table_id in ($2, $3)
);