如果子查询 returns 为空,则 SQL 查询失败

Have SQL query fail if subquery returns null

如果下面的子查询没有找到记录它 returns null 并设置 action_batch_id 如此。如果子查询 returns 没有记录,是否可以拥有整个查询 fail/exit?

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
)

尝试使用 COALESCE():

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

在子查询 returns NULL 的情况下, action_batch_id 列将不会更改。在子查询返回一个或多个非 NULL 记录的情况下,您的 UPDATE 将像以前一样运行。

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

然后

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