MySQL INNER JOIN只从其他表中选择一行

时间:2018-01-05 14:01:10

标签: mysql

我一直试图找出一个MySQL语句来执行以下操作。

  • 我有一个存储作业的表(tbl_jobs)。
  • 另一个以固定时间段的形式存储工作安排(tbl_schedule)的表。
  • 我希望生成的查询显示今天安排的所有作业,检查作业是否已经安排(时间段字段)并返回最早的时间段。
  • 我的时间段存储为1-8的数字,因此我使用MIN来获得最小的数字。
    • 跨越多个时段可以有相同的工作。

我尝试了来自MySQL INNER JOIN select only one row from second table的代码,但我相信我对该查询的理解程度不足以根据我的目的发表自己的陈述

 SELECT a.*, c.*
      FROM tbl_jobs a
      INNER JOIN tbl_schedule c
      ON a.job_id =  c.job_id
           INNER JOIN (
           SELECT job_id, MIN(timeslot) ts
           FROM tbl_schedule 
           GROUP BY job_id
           ) b ON c.job_id = b.job_id
      WHERE date = '2018-01-05'

关于返回已安排的作业和未安排的作业的查询根本不会显示。

如果有人能帮助我从哪里开始,我将不胜感激?我遇到了障碍,所以我决定在这里寻求帮助!提前谢谢!

1 个答案:

答案 0 :(得分:1)

要获得未安排的工作,请使用左连接

  SELECT a.*, c.*
  FROM tbl_jobs a
  LEFT JOIN tbl_schedule c
  ON a.job_id =  c.job_id
       LEFT JOIN (
       SELECT job_id, MIN(timeslot) ts
       FROM tbl_schedule 
       GROUP BY job_id AND
       ) b ON c.job_id = b.job_id
  WHERE date = '2018-01-05'