如何从联接中的子查询中获取列

时间:2020-07-16 15:35:05

标签: mysql sql subquery

我有一个查询,其中包含多个left joins,最后一个left join,其中一个我正在使用sub query(因为必须排序),因此我需要几列来表示。 我写的查询:

SELECT pr.id, prs.requestStatus, prs.changeDate 
FROM `ho_port_phone_number_requests` pr
left join ho_port_phone_number_requests_rejection_reason rrr on rrr.id = 
pr.rejectionReasonId
left join ho_user u on u.userId = pr.csId
left join ho_customer c on c.id = pr.customerId
left JOIN 
(SELECT requestId, requestStatus, changeDate FROM 
ho_port_phone_number_request_status ORDER BY requestId DESC LIMIT 1) prs
ON prs.requestId = pr.id

我知道我可以在SELECT内编写两个子查询,但是这样做的时间要长得多。可以运行但运行缓慢的代码:

SELECT pr.id,
(SELECT st.requestStatus FROM ho_port_phone_number_request_status st
WHERE st.requestId = pr.id ORDER BY requestId DESC LIMIT 1) as rStatus,
(SELECT st.changeDate FROM ho_port_phone_number_request_status st
WHERE st.requestId = pr.id ORDER BY requestId DESC LIMIT 1) as rDate
FROM `ho_port_phone_number_requests` pr
left join ho_port_phone_number_requests_rejection_reason rrr on rrr.id = 
pr.rejectionReasonId
left join ho_user u on u.userId = pr.csId
left join ho_customer c on c.id = pr.customerId

有什么建议吗?

1 个答案:

答案 0 :(得分:-1)

您可以尝试在下面的查询中进行查询,如果每个pr.id的requestId都是唯一的,它将返回正确的结果。

SELECT pr.id, prs.requestStatus, prs.changeDate 
FROM `ho_port_phone_number_requests` pr
left join ho_port_phone_number_requests_rejection_reason rrr on rrr.id = 
pr.rejectionReasonId
left join ho_user u on u.userId = pr.csId
left join ho_customer c on c.id = pr.customerId
left JOIN ho_port_phone_number_request_status prs on prs.requestId = pr.id
where prs.requestId = (SELECT min(requestId) FROM 
ho_port_phone_number_request_status where requestId = pr.id)
group by pr.id
相关问题