MySQL: LEFT JOIN, MAX 不允许出现在 ON 或 WHERE 子句中

MySQL: LEFT JOIN, MAX not allowed in ON or WHERE clauses

让我们看看 tables:

tbl_specimen
specimen_id | create | specimen_gid | specimen_name | specimen_owner
1 |01.01.2015| 1000 | Banafone | John
2 |03.01.2015| 1000 | Modified Banafone | John
3 |05.01.2015| 1001 | Cucumberfone | John
3 |06.01.2015| 1002 | Cherryfone | Mike

GID 是项目的唯一编号。所以 specimen_id 和 specimen_id 是一样的,只是版本不同而已。这些项目必须检查。

tbl_qualitycheck
check_id | checked_specimenid | check_date | check_result
2001 | 1| 02.01.2015 | good
2002 | 3| 06.01.2015 | good

如您所见,未检查 GID1000 的当前版本(未检查 specimen_id=2)

Wanted result
1000 | Modified Banafone | NULL <= because current version is not checked
1001 | Cucumberfone | good

我开始明白了运行:

SELECT 
   tbl_specimen.specimen_gid,
   max(tbl_specimen.specimen_id) as max_specimen_id,
   tbl_specimen.specimen_name
FROM
   tbl_specimen
WHERE
  tbl_specimen.specimen_owner = "John"
GROUP BY
  tbl_specimen.specimen_gid;

结果我得到了项目的当前版本。在下一步中,我想用 tbl_qualitycheck 丰富 table。 我插入了一个

LEFT JOIN tbl_qualitycheck ON checked_specimenid = max_specimen_id

在 FROM - 部分之后出现错误 然后我测试了:

LEFT JOIN tbl_qualitycheck ON checked_specimenid = MAX(specimen_id)

...出现错误 我读到 max 在 ON 或 WHERE 子句中不是 allout,但我没有解决问题的想法。

select tq.* --change this selection to be more appropriate 
from 
(
SELECT 
tbl_specimen.specimen_gid
max(tbl_specimen.specimen_id) as max_specimen_id
tbl_specimen.specimen_name
FROM tbl_specimen
WHERE tbl_specimen.specimen_owner = "John"
GROUP BY tbl_specimen.specimen_gid) t
left join tbl_qualitycheck tq on tq.checked_specimenid = t.max_specimen_id

由于您不能在 join 子句中使用计算列(如果它是聚合结果),您应该将其作为子查询,然后在表上 join需要。