我想对左联接进行子查询,但左联接中的where子句无法识别这是我的查询
SELECT * FROM proposal p
LEFT JOIN (SELECT MAX(id_verifikasi), id_proposal FROM verifikasi v WHERE v.id_proposal = p.id_proposal) as v on p.id_proposal = v.id_proposal
WHERE p.id_unit = 6
并返回类似的错误
#1054 - Unknown column 'p.id_proposal' in 'where clause'
我做错了什么?什么是正确的查询
我怀疑您想将表proposal
连接到一个查询,该查询为表verifikasi
:的每个id_proposal
返回最大id_verifikasi
SELECT *
FROM proposal p
LEFT JOIN (
SELECT id_proposal, MAX(id_verifikasi) id_verifikasi
FROM verifikasi
GROUP BY id_proposal
) v ON p.id_proposal = v.id_proposal
WHERE p.id_unit = 6
FROM
子句中有一个相关的子查询。只有MySQL的最新版本通过横向连接支持这一点。
在您的情况下,查询返回一列最多一行,因此它是一个标量相关子查询。因为您在外部查询中进行筛选,所以性能最好的查询将使用相关的子查询:
SELECT p.*,
(SELECT MAX(v.id_verifikasi)
FROM verifikasi v
WHERE v.id_proposal = p.id_proposal
)
FROM proposal p
WHERE p.id_unit = 6;