order-by对mysql中union的一次查询

e3bfsja2  于 2021-06-24  发布在  Mysql
关注(0)|答案(4)|浏览(354)

我有一个这样的问题

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只在第一个查询中出现在第二个查询中。

zzlelutf

zzlelutf1#

您需要编写一个子查询并 seqnum 标记第一个查询和第二个查询,然后使用多个 order byseqnum 以及 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

f3temu5u

f3temu5u2#

不,你不能你需要 subquery :

SELECT *
FROM (SELECT id, name, count 
      FROM Teacher 
      UNION 
      SELECT '', '', (SELECT count(*) FROM student)
     ) t
ORDER BY name;

相反,我会像用单曲一样重写 SELECT 声明:

SELECT *
FROM (SELECT id, name, count 
      FROM Teacher 
      UNION 
      SELECT '', '', count(*) 
      FROM student
     ) t
ORDER BY name;
exdqitrt

exdqitrt3#

试试use(),它可以让您在第一次查询时按顺序进行排序

(SELECT t.id,t.name,t.count FROM Teacher ORDER BY t.name ASC) UNION (SELECT '','', (SELECT count(*) FROM student))
mspsb9vt

mspsb9vt4#

你不能订购工会的“部分”;即使您试图用子查询强制它,mysql也会忽略它。不过,您可以创建一个额外的排序字段。以下是此方法的通用模板:

SELECT u.A, u.B, u.C
FROM
(
   SELECT 0 as seq, A, B, C
   FROM table1
   UNION 
   SELECT 1 AS seq, A, B, C
   FROM table2
) AS u
ORDER BY u.seq

相关问题