【发布时间】:2019-08-23 05:17:18
【问题描述】:
表 1
ID | Name
1 Brain
2 Amy
表2:
ID | WorkDay | MissionCode
1 2019-01-01 2360
1 2019-02-01 2470
2 2019-01-01 4470
2 2019-02-01 7210
我想要实现的是,我想获取表 1 的所有字段并在表 2 上左连接,但只有最新的 WorkDay 值,如下所示:
预期结果
ID | Name | WorkDay | MissionCode
1 Brain 2019-02-01 2470
2 Amy 2019-02-01 7210
到目前为止我尝试过的是:
SELECT
table1.*, t2.WorkDay, t2.MissionCode
FROM
table1
LEFT JOIN
(SELECT
*
FROM
table2
ORDER BY
WorkDay DESC
LIMIT 0,1) AS t2
ON
t2.id = table1.id
但它从 table2 返回 NULL 值,如下所示:
ID | Name | WorkDay | MissionCode
1 Brain NULL NULL
2 Amy NULL NULL
我测试了相同的查询,在内部连接的 select 命令中添加了额外的 WHERE 子句,它成功了。
SELECT
table1.*, t2.WorkDay, t2.MissionCode
FROM
table1
LEFT JOIN
(SELECT
*
FROM
table2
**WHERE id = 1**
ORDER BY
WorkDay DESC
LIMIT 0,1) AS t2
ON
t2.id = table1.id
并且它返回 ok,对于第一行当然:
ID | Name | WorkDay | MissionCode
1 Brain 2019-02-01 2470
2 Amy NULL NULL
但是我不能用
WHERE id = table1.id
因为 MySQL 说
Unknown column 'table1.id' in 'where clause'
那么,正确的做法是什么?
【问题讨论】:
-
“获取表 1 的所有字段并在表 2 上左连接,但只有最新的 WorkDay 值”不清楚。使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。在描述结果时:说足够多的人可以离开并带着解决方案回来。请在代码问题中给出minimal reproducible example--cut & paste & runnable code 加上所需的输出加上清晰的规范和解释。因此,给出您所展示的最少代码可以满足您的期望,并且在您出错的第一个地方提供最少的代码。 (调试基础。)
标签: mysql greatest-n-per-group