如果子查询 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'));
如果下面的子查询没有找到记录它 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'));