如何进行与排序字段无关的查询?

时间:2011-06-16 23:56:30

标签: sql sorting

我有多个表在每个表中添加了相同的date_time字段。在完成所有表的UNION之后,我想用最新的表对它们进行排序。但查询将告诉我,我必须添加一个像videos.date_time而不是ORDER BY date_time的表名。如何构造查询以使其不知道哪个date_time字段?

3 个答案:

答案 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;

我想到的其他方法是,当您获取结果时,将它们放入数组并在其中执行“魔术”。