【发布时间】:2016-02-19 01:50:50
【问题描述】:
如果下面的子查询没有找到记录,它会返回 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
)
【问题讨论】:
-
这可能会有所帮助:stackoverflow.com/a/8766815/1073631 -- 假设您有一个
join的字段...action_batch_items是否有一个action_batches_id? -
因为我没有误会你的意思,但是这个查询对我来说真的很奇怪。您将 action_batch_id 更新为子查询的结果,但在您的子查询中,让我们检查一下。您选择 ID,其中 id = '123'。所以不是所有的结果都应该是 123 或 null?正如你问的那样,你期望 123 或根本没有变化?
-
@sgeddes 它是 ActiveRecord 执行原始 SQL,但是 action_batch_item 有一个 action_batch_id
-
您的内部子查询令人困惑。如果您有
WHERE id = '123',这是否意味着分配给action_batch_id的id将始终为123?
标签: sql postgresql subquery