Объединить результаты двух запросов - PullRequest
0 голосов
/ 26 апреля 2020

Таблица 1: Выбранные лица

id|name|date|rating

Таблица 2: Персоны

id|name|date|rating

Я хочу создать запрос, который будет возвращать все выбранные лица в порядке по дате des c от table 1 и всех лиц с table 2 по рейтингу в порядке c.

если в таблице 1 3 человека и в таблице 2 4 человека, запрос должен вернуть первых 3 выбранных лиц упорядочено по дате, сначала 3 записи, а затем 4 человека записи с порядком по рейтингу Как я могу добиться этого, используя sql?

Ответы [ 3 ]

2 голосов
/ 26 апреля 2020

Вот один метод, который будет работать в большинстве баз данных:

select id, name, date, rating
from ((select id, name, date, rating, 1 as which
       from table1
      ) union all
      (select id, name, date, rating, 2 as which
       from table1
      )
     ) t
order by which,
         (case when which = 1 then date end),
         rating
1 голос
/ 26 апреля 2020

Я думаю, что вы хотите:

select id, name, date, rating
from (
    select id, name, date, rating, 't1' which from table1
    union all
    select id, name, date, rating, 't2' which from table2
)
order by
    case when which = 't1' then date end desc,
    rating end desc

Подзапрос использует union all для выбора из обеих таблиц с дополнительным столбцом, который указывает, из какой таблицы происходит каждая запись. Затем внешний запрос выполняет условную сортировку:

  • выражение case возвращает date от t1, иначе null; следовательно, сортировка по убыванию ставит t1 rows first, ordered by descending dates (rows from t2 get null`, что в порядке убывания занимает последнее место)

  • второй критерий сортировки сортирует оставшиеся строки (ie из t2 by descending рейтинг`

В MySQL это можно немного сократить:

(
    select id, name, date, rating, 't1' which from table1
    union all
    select id, name, date, rating, 't2' which from table2
)
order by
    case when which = 't1' then date end desc,
    rating end desc
0 голосов
/ 26 апреля 2020

Это вариант использования для Union. Попробуйте следующий запрос:

SELECT id, name, date, rating FROM table1   
ORDER BY date DESC
UNION
SELECT id, name, date, rating FROM table2
ORDER BY rating DESC
...