【问题标题】:MySQL : Left join with group by recordsMySQL:左加入按记录分组
【发布时间】:2018-06-08 17:43:46
【问题描述】:

我有两张桌子

工作

id | job_num | comp_date
-----------------------------
 1 | J01     | NULL
 2 | J02     | NULL
 3 | J03     | NULL
 4 | J04     | NULL
 5 | J05     | NULL

适合

id | job_id | status | apt_date   | user_id
-----------------------------------------
1  | 1      | 1      | 2018-08-09 | 1
2  | 1      | 1      | 2018-08-09 | 2
3  | 2      | 2      | 2018-08-09 | 1

我正在尝试从 2 个带有左连接限制的表中获取数据

查询

SELECT j.* , a.* FROM `job` j 
LEFT JOIN apt a 
ON j.id = a.job_id AND a.status = 1
Group by a.date

结果

id | job_num | comp_date| id | job_id | status | apt_date
---------------------------------------------------------
 2 | J02     | NULL     |NULL|NULL    | NULL   | NULL
 1 | J01     | NULL     | 1  |1       | 1      | 2018-06-05

我需要 Job 表中的所有数据和状态为 1 的 apt 表中的 1 条记录

预期输出

id | job_num | comp_date| id | job_id | status | apt_date
---------------------------------------------------------
 1 | J01     | NULL     | 1  |1       | 1      | 2018-06-05
 2 | J02     | NULL     |NULL|NULL    | NULL   | NULL
 3 | J03     | NULL     |NULL|NULL    | NULL   | NULL
 4 | J04     | NULL     |NULL|NULL    | NULL   | NULL
 5 | J05     | NULL     |NULL|NULL    | NULL   | NULL

如何按记录分组?

【问题讨论】:

  • 您可以加入 apt 表上的子查询,但该子查询有限制。
  • 好吧,如果不是,我想要带有 group by 的 apt 表数据。如果状态 = 1,则在 apt 状态下,该作业的所有状态 1 的 apt_date 始终相同
  • 按什么顺序限制?如果 aptjob_idstatus 有多个日期怎么办。你想要哪一个?哪个 user_id?
  • 这就是我想按 apt_dae 分组的原因
  • 如果您按日期分组,并且job_id 有多个日期,status 为 1,那么您将获得每个 job.id 的多个记录。那是你要的吗?您能否分享更多显示此场景的示例数据以及您想要的结果?目前还不清楚你想用这个非常有限的样本做什么。

标签: mysql left-join limit


【解决方案1】:

终于找到了。

SELECT j.* , a.* FROM `job` j 
LEFT JOIN (SELECT * FROM `apt` WHERE `date` IS NOT NULL AND status =1 GROUP by `date`) as a 
ON j.id = a.job_id 

【讨论】:

    猜你喜欢
    • 2018-05-13
    • 2014-12-19
    • 2018-08-13
    • 1970-01-01
    • 2017-05-30
    • 2019-12-02
    • 2015-01-30
    • 2014-01-31
    • 2011-10-22
    相关资源
    最近更新 更多