我有一个这样的问题
SELECT t.id,t.name,t.count
FROM Teacher
UNION
SELECT '','',(SELECT count(*) FROM student)
现在我只想在union之前的第一个查询中使用order by,如下所示
SELECT t.id,t.name,t.count
FROM Teacher
ORDER BY t.name ASC
UNION
SELECT '','', (SELECT count(*) FROM student)
但它不起作用
我也用过
SELECT *
FROM (SELECT t.id,t.name,t.count FROM Teacher) as teacher
UNION
SELECT '','',(SELECT count(*) FROM student)
ORDER BY name ASC
但是它在orderby中也包含了第二个查询,并且它也改变了它的位置,我不希望orderby只在第一个查询中出现在第二个查询中。
4条答案
按热度按时间zzlelutf1#
您需要编写一个子查询并
seqnum
标记第一个查询和第二个查询,然后使用多个order by
在seqnum
以及name
```SELECT t.*
FROM (
SELECT 1 seqnum,t.id,t.name,t.count
FROM Teacher
UNION
SELECT 2,'','', (SELECT count(*) FROM student)
) t
ORDER BY t.seqnum,t.name
f3temu5u2#
不,你不能你需要
subquery
:相反,我会像用单曲一样重写
SELECT
声明:exdqitrt3#
试试use(),它可以让您在第一次查询时按顺序进行排序
mspsb9vt4#
你不能订购工会的“部分”;即使您试图用子查询强制它,mysql也会忽略它。不过,您可以创建一个额外的排序字段。以下是此方法的通用模板: