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

Posted

技术标签:

【中文标题】MySQL INNER JOIN 从其他表中只选择一行【英文标题】:MySQL INNER JOIN Select only one row from other table 【发布时间】:2018-06-15 08:34:38 【问题描述】:

我一直在尝试找出一个 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】:

要获得计划外的工作,请使用左连接

  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'

【讨论】:

以上是关于MySQL INNER JOIN 从其他表中只选择一行的主要内容,如果未能解决你的问题,请参考以下文章

SQL INNER JOIN - 根据另一行的值从另一个表中选择数据

mysql 里面JOIN 和 INNER JOIN 区别是啥

MySQL 连接的使用:语法及案例剖析INNER JOINLEFT JOINRIGHT JOIN

如何在 SQL Server 中使用 INNER JOIN 从多个表中删除

Mysql 连接(left join, right join, inner join ,full join)

Mysql Inner join,Where,Between 在多个表中