Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:两个表共享“公共”;日期“;列,如何在联接后一起排序日期?_Mysql_Date_Join_Sql Order By_Multiple Columns - Fatal编程技术网

MySQL:两个表共享“公共”;日期“;列,如何在联接后一起排序日期?

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 +--------+----------+ |

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

例如,以下是我的两张表:

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