我想在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)
);