我有多个表在每个表中添加了相同的date_time字段。在完成所有表的UNION之后,我想用最新的表对它们进行排序。但查询将告诉我,我必须添加一个像videos.date_time而不是ORDER BY date_time的表名。如何构造查询以使其不知道哪个date_time字段?
答案 0 :(得分:4)
除非您使用SQL Server的TOP指令等专有功能,否则联合查询中的Order By始终位于底部,始终适用于整个查询。 E.g。
Select Col1, date_time
From Table1
Union All
Select Col1, date_time
From Table2
Order By date_time
如果您的查询确实包含需要Order By的TOP或LIMIT等各种元素,因此您希望区分Order By,那么您可以将查询封装到派生表中:
Select Col, date_time
From (
Select Col1 As Col, date_time
From Table1
Union All
Select Col1, date_time
From Table2
) As Z
Order By Z.date_time
答案 1 :(得分:1)
在SQL Server中,您还可以按列号排序,例如“ORDER BY 2”在这种情况下,无论你的联合集中的第二列是什么,都将是排序目标。
答案 2 :(得分:0)
据我所知,你有X表(其中X是> 1),并且每个表都有自己的date_time
列,你想要最后更新。如果这是真的,那么可能的方法之一就是这样做
SELECT id, date_added FROM table1
UNION ALL
SELECT id, date_added FROM table2
ORDER BY date_added DESC;
我想到的其他方法是,当您获取结果时,将它们放入数组并在其中执行“魔术”。