sql - 从选择中更新,否则如果在 PostgreSQL 中为空,则恢复为其他选择
问题描述
我正在执行以下查询:
UPDATE "job"
SET pending=true, completor='{client.uuid}'
WHERE "number" IN
(
SELECT "number" FROM "job"
WHERE pending=false AND closed=false AND gpu=false
ORDER BY RANDOM() LIMIT 1
FOR UPDATE SKIP LOCKED
)
AND pending=false AND closed=false AND gpu=false
;
但是,我希望它尝试job
使用相同的查询来获取 a ,但需要csv=true
,并且如果没有与该查询匹配的作业,它应该恢复为使用当前选择(如上面括号内使用的那样)。
这将是选择csv=true
:
(
SELECT "number" FROM "job"
WHERE pending=false AND closed=false AND gpu=false AND csv=true
ORDER BY RANDOM() LIMIT 1
FOR UPDATE SKIP LOCKED
)
AND pending=false AND closed=false AND gpu=false AND csv=true
我怎么能做到这一点,最好只在需要时执行第二个查询?
提前致谢。
解决方案
按可选标准排序。我假设csv
是一个boolean
类型并且 NULL 不符合标准。
UPDATE "job"
SET pending=true, completor='{client.uuid}'
WHERE "number" IN
(
SELECT "number" FROM "job"
WHERE pending=false AND closed=false AND gpu=false
ORDER BY coalesce(csv,false) DESC, RANDOM()
LIMIT 1
FOR UPDATE SKIP LOCKED
)
AND pending=false AND closed=false AND gpu=false
推荐阅读
- ios - 为什么在覆盖自定义单元格的 setSelected 方法后,表格视图单元格每次在滚动时出现时都会被选中?
- swift - 无法转换“MyEnum”类型的值
' 到预期的参数类型 'MyEnum<_>' - python - Python C++浮点数学表示错误
- tensorflow - 我使用 tf.data.TFRecordDataset 读取 tfcord ,为什么我读取的数据不正确
- php - 用于两个独立查询的 PHP mysqli_fetch_assoc
- sql-server - SSMS:即使启用了选项,也禁用了“生成更改脚本”
- javascript - 使用 fo:external-graphic XSL 从外部 http URL 加载图像
- spring-boot-admin - 成功登录后 Spring Boot Admin Server 重定向到 login.html
- shell - 如何在 shell 脚本中自动读取命令?
- c++ - 我可以避免包括
如果我不使用它的功能?