如何从postgresql查询中的嵌套select返回多列



我有一个postgresql查询,如下所示:

update service_requests
set service_request_status = 'Rejected', modified_on = now()
where service_request_id = $1 and service_request_status = 'Submitted'
returning 
(select service_request_id, service_request_status, requestor_id
from service_requests
where service_request_job_uuid in
(select service_request_job_uuid from service_requests where service_request_id = $1)
)

我得到一个错误:子查询必须只返回一列

但我至少需要返回三个:service_request_id、service_requestrongtatus和requestor_id。它们需要从被更新的记录所属的一组记录中返回。

其想法是:用户向一个或多个我们称之为"专业人士"的人提交服务请求。这些专业人士根据服务请求出价。数据库中每个专业都有一行,它们由service_request_job_uuid列分组在一起。在专业人员拒绝服务请求的情况下,将运行此查询。我们希望返回与此服务请求相对应的所有记录,看看是否有其他专业人员尚未拒绝该服务请求。

但是,如果我不能在第一个嵌套选择中选择多个列,我该如何返回所需的信息?

谢谢。

我想你想要:

with upd as (
update service_requests
set service_request_status = 'Rejected', modified_on = now()
where service_request_id = $1 and service_request_status = 'Submitted'
returning service_request_id 
)
select service_request_id, service_request_status, requestor_id
from service_requests sr
where exists (
select 1 
from service_requests sr1
inner join upd u on u.service_request_id = sr1.service_request_id 
where sr1.service_request_job_uuid = sr.service_request_job_uuid
)

或者,也许:

with upd as (
update service_requests
set service_request_status = 'Rejected', modified_on = now()
where service_request_id = $1 and service_request_status = 'Submitted'
returning service_request_job_uuid 
)
select sr.service_request_id, sr.service_request_status, sr.requestor_id
from service_requests sr
inner join upd u on u.service_request_job_uuid = sr.service_request_job_uuid

最新更新