Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL左连接仅1行,具体取决于MAX()值 表1 表2:_Mysql_Greatest N Per Group - Fatal编程技术网

MySQL左连接仅1行,具体取决于MAX()值 表1 表2:

MySQL左连接仅1行,具体取决于MAX()值 表1 表2:,mysql,greatest-n-per-group,Mysql,Greatest N Per Group,我想要实现的是,我想要获得表1中的所有字段和表2中的左联接,但只获取最新的WorkDay值,如下所示: ID | Name | WorkDay | MissionCode 1 Brain NULL NULL 2 Amy NULL NULL 预期结果 到目前为止,我尝试的是: SELECT table1.*, t2.WorkDay, t2.MissionCode FROM table1 LEFT JOIN (S

我想要实现的是,我想要获得表1中的所有字段和表2中的左联接,但只获取最新的WorkDay值,如下所示:

ID | Name | WorkDay    | MissionCode
1    Brain  NULL         NULL
2    Amy    NULL         NULL
预期结果 到目前为止,我尝试的是:

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
但它从表2中返回空值,如下所示:

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'

那么,正确的方法是什么呢?

您可以使用一个简单的
JOIN
table2
,只需将
MAX(WorkDay)
条件作为一个相关的子查询放入
JOIN
条件,在那里您可以访问
table1
id值:

SELECT *
FROM table1 t1
JOIN table2 t2 ON t2.id = t1.id AND
                  t2.WorkDay = (SELECT MAX(WorkDay) 
                                FROM table2 
                                WHERE table2.id = t1.id)
输出:

ID  Name    ID  WorkDay     MissionCode
1   Brain   1   2019-02-01  2470
2   Amy     2   2019-02-01  7210

这也输出相同的结果,但请注意@Nick的答案更好
--1-------

select
  t1.id,t1.name,t2.workday,t2.Missioncode
  from t1
  left join t2 on 
  t1.id=t2.id
  and t2.workday =(select max(workday) from t2 );
 select t1.id,t1.name,
  (select max(workday) from t2 where t2.id=t1.id)as workday,
  (select max(MissionCode) from t2 where t2.id=t1.id)as missioncode
  from t1;
--2-------

select
  t1.id,t1.name,t2.workday,t2.Missioncode
  from t1
  left join t2 on 
  t1.id=t2.id
  and t2.workday =(select max(workday) from t2 );
 select t1.id,t1.name,
  (select max(workday) from t2 where t2.id=t1.id)as workday,
  (select max(MissionCode) from t2 where t2.id=t1.id)as missioncode
  from t1;

“获取表2上的所有表1字段和左联接,但仅获取最新的工作日值”不清楚。使用足够的单词、句子和引用部分例子,清楚、完整地说出你的意思。当描述一个结果时:说足够多的话,有人可以离开并带着解决方案回来。请在代码问题中给出一个——剪切、粘贴和可运行的代码,加上所需的输出,再加上清晰的说明和解释。所以,给你展示的最小代码做你所期望的&在你出错的第一个地方给出最小的代码。(调试基础。)