我有两个表,每个表都有一个名为“日期”的列。我想加入他们,但要按常用格式的日期列进行排序。
例如,这是我的两个表:
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/