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
需要。
让我们看看 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
需要。