Упорядочить по одному запросу union в mysql - PullRequest
0 голосов
/ 25 июня 2018

У меня такой запрос

SELECT t.id,t.name,t.count 
FROM Teacher 
UNION 
SELECT '','',(SELECT count(*) FROM student)

Теперь я хочу использовать 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

но он включает второй запрос также в порядке, и он также меняет свою позицию, и я не хочу, чтобы заказ был выполнен по второму запросу только по первому.

Ответы [ 4 ]

0 голосов
/ 25 июня 2018

Вам нужно написать подзапрос и сделать 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
0 голосов
/ 25 июня 2018

Вы не можете заказать «части» СОЮЗА;даже если вы попытаетесь форсировать его подзапросами, 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
0 голосов
/ 25 июня 2018

попробуйте использовать (), это позволит вам сделать заказ только по первому запросу

(SELECT t.id,t.name,t.count FROM Teacher ORDER BY t.name ASC) UNION (SELECT '','', (SELECT count(*) FROM student)) 
0 голосов
/ 25 июня 2018

Нет, вам не нужно 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...