MySQL:两个表共享公共(public) "date"列,如何在 JOIN 后将日期一起排序?

标签 mysql date join sql-order-by multiple-columns

我有两个表,每个表都有一个名为“日期”的列。我想加入他们,但要按常用格式的日期列进行排序。

例如,这是我的两个表:

Birthdays
+--------+---------+
| Date   | Name    |
+--------+---------+
| 03/10  | John    |
+--------+---------+
| 09/24  | Sara    |
+--------+---------+

Holidays
+--------+----------+
| Date   | Title    |
+--------+----------+
| 07/04  | July 4th |
+--------+----------+
| 12/25  | Xmas     |
+--------+----------+

我想做的是加入它们并按日期排序。常规的两列排序不起作用,因为如果我不指定我要查找的表的日期列,它会给我一个“不明确”的错误,如果我指定两者之间的共同点,它将对其中一个进行排序并对其进行子排序其他。

这是我想要使用该示例数据的输出:

+--------+---------+----------+
| Date   | Name    | Title    |
+--------+---------+----------+
| 03/10  | John    |          |
+--------+---------+----------+
| 09/24  | Sara    |          |
+--------+---------+----------+
| 07/04  |         | July 4th |
+--------+---------+----------+
| 12/25  |         | Xmas     |
+--------+---------+----------+

任何有关如何执行此操作的建议将不胜感激,谢谢!

最佳答案

SELECT u.Date, b.Name, h.Title
FROM
  (SELECT Date FROM Birthdays UNION SELECT Date FROM Holidays) u
  LEFT JOIN Birthdays b ON u.Date=b.Date
  LEFT JOIN Holidays h ON u.Date=h.Date

或者您可能还想对名称列进行分组,例如使用 GROUP_CONCAT:

SELECT u.Date, GROUP_CONCAT(b.Name) Names, h.Title
FROM
  (SELECT Date FROM Birthdays UNION SELECT Date FROM Holidays) u
  LEFT JOIN Birthdays b ON u.Date=b.Date
  LEFT JOIN Holidays h ON u.Date=h.Date
GROUP BY
  u.Date, h.Title

假设多个名字可以共享同一个生日,并且一次只能有一个假期。

关于MySQL:两个表共享公共(public) "date"列,如何在 JOIN 后将日期一起排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19986904/

相关文章:

mysql - View 上的读取操作更快还是在表上?

php - MYSQL一对多关系插入数组

MySQL 更新加入未按预期工作

java - thread.join触发thread.wait(),但为什么不需要线程监视器?

具有空值的多个字段的 SQL 联接

mysql - 如何在node.js lambda aws中的httpget请求中获取mysql数据

两列的 MySQL 动态交叉表

php - 在 JS 中默认更改时区

javascript - jQuery - 检查当前日期和时间是否在所选日期和时间的 24 小时内

ruby - 将 RSS pubDate 日期转换为 MM-DD-YY HH :MM