我要在dining_table_grouping
表中存储以下列:
insert
语句为每个列提供值。
我要对此insert
语句应用条件。
因此,如果我要存储列的值
这些列中已经存在我想进一步检查是否要存储在列中的值
。但是,这两列中的任何一个都不应该存在这些值。
如果同时满足两个条件,则不应存储这些值。 如果满足第一个条件,不满足第二个条件,则存储值。 如果不满足第一个条件,但满足第二个条件,则存储值。 (无需检查第二个条件) 如果不满足任何条件,请存储这些值。
示例:
表中的值:
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
结果:
满足第一个条件。 第二个也。 值将不会存储。
我该如何实现?
一个类似的问题:
Postgres CASE Statement in an insert
我认为我的尝试只会使您感到困惑,但仍然是这样:
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;
非常感谢您的帮助!
答案 0 :(得分:0)
这可能是您要问的:
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)
);