我有一个查询,其中包含多个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
有什么建议吗?
答案 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