是否可以执行以下操作:
select name from table1 order by name
union
select name from table2 order by name
我知道我可以做到:
select name from table1
union
select name from table2 order by name
但是,我希望table1中的名称首先出现。我花了最后一个小时在Google上搜索,但我却一无所获。例如,我看过这里:How to order by with union in SQL?
答案 0 :(得分:3)
查询需要更复杂一些:
select name
from ((select distinct name, 1 as is_1 from table1)
union
(select distinct name, 0 from table2)
) n
group by name
order by max(is_1), name;
这在子查询中使用select distinct
,因为它可以利用name
上的索引。
答案 1 :(得分:2)
添加一个“排序”字段,并将union
放在子查询中,以便您可以在合并后的 后进行排序。
未体验
select a.name
from (
select name, 1 sort
from table1
union all
select name, 2 sort
from table2
) a
order by a.sort, a.name
我将其更改为union all
,以明确表示此方法不会执行union
。如果要查看它,也可以选择sort
列。如果您不想使用重复的名称,那么这种方法将行不通。
答案 2 :(得分:0)
您需要另一列进行排序。 UNION不允许单个查询具有ORDER BY子句。
在名称之前添加一列以进行排序,这样它就可以对单个结果集进行排序。参见下面的示例:
CREATE TABLE #Table1 (Name VARCHAR(50))
CREATE TABLE #Table2 (Name VARCHAR(50))
INSERT INTO #Table1 VALUES ('Bart'), ('Lisa'), ('Maggie')
INSERT INTO #Table2 VALUES ('Chris'), ('Meg'), ('Stewie')
SELECT Name, 0 AS Sort FROM #Table1
UNION
SELECT Name, 1 AS Sort FROM #Table2
ORDER BY Sort, Name