簡體   English   中英

MySQL LEFT JOIN僅取決於MAX()值的1行

[英]MySQL LEFT JOIN only 1 row depending on MAX() value

表格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

對於課程的第一行,它返回確定:

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'

那么,正確的方法是什么?

您可以對table2使用簡單的JOIN ,只需將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

dbfiddle上的演示

這也輸出相同,但請注意@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 );

---------- ------------ 2

 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM