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 从多个表中删除