Postgres:有条件地添加到 table
Postgres: Conditionally adding to table
我无法弄清楚如何使用 Postgres 在 table 中专门插入一行,如果特定条件为真。
我找到了很多使用 CONFLICT
的答案,但我要检查的值不是唯一的,所以我不能做太多事情。我也试过 IF
ELSE
但据我所知 Postgres 不支持这个?
这是我当前的查询:
IF EXISTS (SELECT id FROM "Vote" as v WHERE v."createdAt" >= '2020-09-01' AND v."createdAt" < '2020-10-01' AND v."authorId" = 6667 )
PRINT 'do nothing'
ELSE
INSERT INTO "Vote" ("authorId", "serverId") VALUES (1, 1);
它returns:
ERROR: syntax error at or near "IF"
本质上,我是在检查用户是否在两个日期之间进行了投票,如果为真,则不应发生任何事情,如果为假,则应将投票插入 table.
是检查是否应该插入某些内容并可以在单个查询中插入它,还是我应该先检查该值是否存在然后 运行 插入查询?
使用普通 SQL:
INSERT INTO "Vote" ("authorId", "serverId")
SELECT 1, 1
WHERE NOT EXISTS (
SELECT id
FROM "Vote" as v
WHERE
v."createdAt" >= '2020-09-01' AND
v."createdAt" < '2020-10-01' AND
v."authorId" = 6667)
平原里没有IF
SQL,只有pl/sql
我无法弄清楚如何使用 Postgres 在 table 中专门插入一行,如果特定条件为真。
我找到了很多使用 CONFLICT
的答案,但我要检查的值不是唯一的,所以我不能做太多事情。我也试过 IF
ELSE
但据我所知 Postgres 不支持这个?
这是我当前的查询:
IF EXISTS (SELECT id FROM "Vote" as v WHERE v."createdAt" >= '2020-09-01' AND v."createdAt" < '2020-10-01' AND v."authorId" = 6667 )
PRINT 'do nothing'
ELSE
INSERT INTO "Vote" ("authorId", "serverId") VALUES (1, 1);
它returns:
ERROR: syntax error at or near "IF"
本质上,我是在检查用户是否在两个日期之间进行了投票,如果为真,则不应发生任何事情,如果为假,则应将投票插入 table.
是检查是否应该插入某些内容并可以在单个查询中插入它,还是我应该先检查该值是否存在然后 运行 插入查询?
使用普通 SQL:
INSERT INTO "Vote" ("authorId", "serverId")
SELECT 1, 1
WHERE NOT EXISTS (
SELECT id
FROM "Vote" as v
WHERE
v."createdAt" >= '2020-09-01' AND
v."createdAt" < '2020-10-01' AND
v."authorId" = 6667)
平原里没有IF
SQL,只有pl/sql