sql - 如果子查询返回 null,则 SQL 查询失败

标签 sql postgresql subquery

如果下面的子查询没有找到记录,它返回 null 并设置 action_batch_id。如果子查询没有返回记录,是否有可能让整个查询失败/退出?

UPDATE action_batch_items 
SET action_batch_id = (SELECT id FROM action_batches WHERE id = '123' 
AND batch_count < 1000  AND batch_size < 100000) 
WHERE id = 1234567

更新:这是结构(它是 ActiveRecord)

CREATE TABLE "public"."action_batches" (
    "id" int8 NOT NULL,
    "action_batch_container_id" int8 NOT NULL,
    "action_message" json,
    "adaptor" json,
    "batch_count" int4 DEFAULT 0,
    "batch_size" int8 DEFAULT 0
)

CREATE TABLE "public"."action_batch_items" (
    "id" int8 NOT NULL,
    "action_batch_id" int8,
    "config" json
)

最佳答案

create or replace function raise_error(text) returns int as $$
begin
  raise exception '%', $1;
  return -1;
end; $$ language plpgsql;

然后

action_batch_id = coalesce((select id ...), raise_error('No data'));

关于sql - 如果子查询返回 null,则 SQL 查询失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35495928/

相关文章:

sql - 每月记录数

mysql - 优化 mysql/postgresql 的创建和更新

sql - 如何将子查询where条件移出子查询?

java - COPY FROM 和 Postgres 中的 C3PO 连接池

linux - 在 linux mint sarah 中安装 postgresql 时出错

mysql - 你能索引子查询吗?

mysql - 计算子查询中的行

PHP 合并数组,因此两个集合的数据都是连续的 $a[0] $b[0] $a[1] $b[1]

html - HTML 行结果的 XSL 替代背景颜色基于 SQL 查询填充的节点元素的变化值

php - 检查 unix 时间戳是否在 MySQL 中的当前月份内