gpt4 book ai didi

sql - 更新并返回一些行两次

转载 作者:行者123 更新时间:2023-11-29 13:28:52 24 4
gpt4 key购买 nike

我尝试更新和返回行。问题是我使用带有 UNION 的嵌套选择来两次获取一些行,我想让它们返回两次。示例:

表:

First_name | last_name | ready
-----------+-----------+------
john | doe | false
| smith | false
jane | | false

查询:

With list(name) as (
Select First_name
from table1
where First_name Not null and ready=false
union
Select last_name
from table1
where last_name Not null and ready=false
)
Select * from list

返回:

John
jane
doe
smith

现在我想更新由 select 找到的行并改用 update ... returning。但是 update 只返回三个受影响的行,而我希望它像示例中的 select 那样返回行。有什么办法吗?

最佳答案

重写为:

WITH cte AS (
UPDATE table1
SET ready = true
WHERE (first_name IS NOT NULL OR last_name IS NOT NULL)
AND NOT ready
RETURNING first_name, last_name
)
SELECT first_name FROM cte WHERE first_name IS NOT NULL
UNION ALL
SELECT last_name FROM cte WHERE last_name IS NOT NULL;

相同的结果,只是更短更快:此查询访问 table1 一次,而不是像原来那样访问三次。
(在测试表上使用 EXPLAIN ANALYZE 验证卓越的性能。)

UNION ALL喜欢@Clodoaldo already mentioned . UNION 会消除重复项,这要慢得多(这里可能是错误的)。

关于sql - 更新并返回一些行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28517297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com