首页 > 解决方案 > SQL 从两个不同的表中选择相同的列

问题描述

我希望你们一切都好!

我处于一种情况,我必须进行 SQL 查询才能从具有相同类型数据的两列中获取最小值和最大值,这些数据仅限于每个相同名称但在两个不同表中的数据。目前我有一个查询,我可以从其中一个表中获取它,但我无法理解如何获取两个表之间的 MIN 日期时间值和两个表之间的 MAX 日期时间值。

为了只从一张表中获取 MAX 和 MIN,我这样做:

SELECT idprojects, projectname, MIN(startDate), MAX(endDate)
FROM projects,
     tasks
WHERE idprojects = projectid
GROUP BY projectid

基本上,这些表是任务表和子项目任务表,我不想通过显示最早的日期时间任务/sptask 的第一个日期和最新的日期时间任务/sptask 来显示整个项目的持续时间。我的表如下所示:

这是 sptask 表

这是任务表

这是项目表

所以我想得到的结果只有一行公关。投影与:

| projectName | idprojects | MIN(startDate) | MAX(endDate) | 

其中 MIN(startDate) 和 MAX(startDate) 是 sptasks 和 tasks 表之间的所有最小和最大日期时间值。

我真的希望有人可以在这里帮助我,因为我一直在尝试的时间无处可去。
祝你好运,注意安全!

标签: mysqlsql

解决方案


您可以使用left join,因为不必为每个项目提供 task 或 sptask。此外,您可以使用greatestandleast如下:

SELECT p.idprojects, p.projectname, 
       MIN(least(coalesce(t.startDate,s.startdate),
                 coalesce(s.startDate,t.startdate))) as startdate,
       MAX(greatest(coalesce(t.endDate,s.enddate),
                    coalesce(s.endDate,t.enddate))) as enddate
  FROM projects p 
  left join tasks t on p.idprojects = t.projectid
  left join sptasks s on p.idprojects = s.projectid
GROUP BY p.idprojects, p.projectname

推荐阅读