如果行不是唯一的,则PostgreSQL不存储,并且值已存储在其他列中

时间:2019-05-11 11:43:24

标签: postgresql

我要存储

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

1 个答案:

答案 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)
);