我有一个表 mytable (id, "someLongURI", status, "userId") 和一个工作查询:
UPDATE mytable
SET status = 'IN_WORK'
WHERE "someLongURI" IN (
SELECT "someLongURI"
FROM mytable
WHERE status = 'UNUSED'
AND pg_try_advisory_xact_lock(id)
ORDER BY id ASC
LIMIT 1
FOR UPDATE
)
RETURNING id, "someLongURI";
Run Code Online (Sandbox Code Playgroud)
但现在我需要检查“userId”参数,并基于此选择现有行或更新(并接收更新的行)。类似的东西(在 MySQL 中这可以工作):
IF NOT EXISTS (
SELECT 1
FROM mytable tbl
WHERE tbl."userId" = 123
)
THEN
UPDATE mytable tbl
SET tbl.status = 'IN_WORK',
tbl."userId" = 123
WHERE tbl."someLongURI" IN (
SELECT "someLongURI"
FROM tbl.mytable
WHERE tbl.status = 'UNUSED'
AND …
Run Code Online (Sandbox Code Playgroud)