postgresql插入案例



我想在dining_table_grouping表中存储以下列:

  • layout_id
  • dining_table_id
  • master_dining_table_id
  • start_timestamp
  • end_timestamp

通过insert语句的每个列的值。

我想在此insert语句上应用条件。

因此,如果我要存储这些列的值

  • start_timestamp
  • end_timestamp
  • layout_id

已经存在于这些列中,我想进一步检查我要存储在列中的值

是否要存储的值
  • dining_table_id
  • master_dining_table_id

这些列中已经存在。但是这些值中的任何一个都不应在两列中的任何一个中都存在。

如果满足两个条件,则不应存储值。如果满足第一个条件,第二个条件未达到,则存储值。如果未满足第一个条件,而是第二个条件,则将值存储。(无需检查第二个条件(如果没有满足条件,请存储值。

示例:

表中的值:

1, 2, 3, 2019-03-13 08:00:00, 2019-03-13 09:00:00

值我要插入:

5, 4, 6, 2019-03-13 07:00:00, 2019-03-13 10:00:00

结果:

未满足第一个条件。值将存储。

值我要插入:

5, 4, 2, 2019-03-13 07:00:00, 2019-03-13 10:00:00

结果:

未满足第一个条件。值将存储。

值我要插入:

5, 4, 2, 2019-03-13 08:00:00, 2019-03-13 10:00:00

结果:

满足了第一个条件。第二个。值不会存储。

我该如何实现?

一个看起来相似的问题:

insert中的Postgres案例语句

我认为我的尝试只是混淆,但仍然是:

INSERT INTO dining_table_grouping 
 
            ( 
                        id, 
                        
 layout_id, 
                        
 dining_table_id, 
                        
 master_dining_table_id, 
                        
 start_timestamp, 
                        
 end_timestamp 
 
            ) 
            
 
SELECT $1, 
       
 $2, 
       
 $3, 
       
 $4, 
       
 $5, 
       
 case
 WHEN ( 
              layout_id <> $1 
       AND    start_timestamp <> $4 
       AND    end_timestamp <> $5) 
AND    ( 
              dining_table_id <> ($2, $3) 
       AND    master_dining_table_id <> ($2, $3)) end
 
FROM   dining_table_grouping;

非常感谢您的帮助!

这可能是您要问的:

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 * from dining_table_grouping where layout_id = $1 and start_timestamp = $4 and start_timestamp = $5 and (dining_table_id = $2 or dining_table_id = $3 or master_dining_table_id = $2 or master_dining_table_id = $3)
);

最新更新