是否可以做这样的事情:
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
但是,我希望表1中的名称首先出现。 我花了最后一个小时在谷歌上搜索这个,但我无处可去。 例如,我在这里看过:如何在SQL中使用联合排序?
查询需要稍微复杂一些:
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
上的索引。
添加一个"sort"字段,并将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
列,也可以选择它。 如果您不想要重复的名称,则此方法将不起作用。
您需要另一列进行排序。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