MySQL:两个表共享“公共”;日期“;列,如何在联接后一起排序日期?
我有两个表,每个表都有一个名为“date”的列。我很想加入他们,但要按常用格式的日期列排序 例如,以下是我的两张表:MySQL:两个表共享“公共”;日期“;列,如何在联接后一起排序日期?,mysql,date,join,sql-order-by,multiple-columns,Mysql,Date,Join,Sql Order By,Multiple Columns,我有两个表,每个表都有一个名为“date”的列。我很想加入他们,但要按常用格式的日期列排序 例如,以下是我的两张表: Birthdays +--------+---------+ | Date | Name | +--------+---------+ | 03/10 | John | +--------+---------+ | 09/24 | Sara | +--------+---------+ Holidays +--------+----------+ |
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 date, name, title from (
select Date, name, '' as Title
from Birthdays
union
select Date, '', title
from Holidays ) table
order by date
使用-statement
SELECT * FROM (
SELECT `Date`, 'Birthday' AS `Type`, `Name` FROM `Birthday`
UNION
SELECT `Date`, 'Holiday' AS `Type`, `Title` FROM `Holiday`
) AS `AllSpecialDays` ORDER BY `Date`
或者,您也可以使用例如group_CONCAT对name列进行分组:
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
假设多个姓名可以共享同一个生日,并且一次只能有一个假日。是否可以不必为对方表格中的每一列添加空白?如果我以后需要添加X列,如果可能的话,我不想更新查询。在这种情况下,您需要的是数据透视表或将行转换为列。你可以通过一个程序来做到这一点。此链接()显示了一个如何执行此操作的示例。接下来,这并不是很简单很难。有没有可能不用重命名对立表中的每一列?如果我以后需要添加X列,我希望不必在可能的情况下更新查询。列名并不重要(正如您所看到的,我只是在第三个位置同时添加了
Name
和Title
)。但是,您选择的列的顺序和数量并不重要(在子选择查询中,列的数量必须相等)。
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