MySQL: собирать записи из нескольких запросов в один результат - PullRequest
0 голосов
/ 25 мая 2009

Я хочу создать запрос SQL, который собирает результаты нескольких запросов.

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

Все запросы будут возвращать одно и то же поле (в этом примере "RefCode"), но будут иметь разные операторы FROM и WHERE.

См. Пример ниже некоторых возможных запросов:

SELECT PD.RefCode
FROM ((PD 
INNER JOIN P ON PD.PrdFK = P.PrdID) 
INNER JOIN PR ON PR.ChildCatFK = P.ChildCatFK)
WHERE PR.ParentCatFK = 6

SELECT PD.RefCode
FROM (PR 
INNER JOIN PD ON PR.PrdDetFK = PD.PrdDetID)
WHERE PR.ChildCatFK = 14

Я пытался сделать это, используя различные методы (т. Е. UNION), но не смог найти правильный метод.

Произвольная сортировка и ограничение записей (с использованием RAND() и LIMIT 0,10) не обязательны, но было бы здорово иметь.

Возможно ли это или мне нужно создавать каждый запрос отдельно?

1 Ответ

3 голосов
/ 25 мая 2009

Используйте UNION для объединения запросов. Оберните их в подзапрос, чтобы вы могли ЗАКАЗАТЬ ПО И ОГРАНИЧИТЬ результат:

SELECT RefCode
FROM (
    SELECT PD.RefCode
    FROM PD 
    INNER JOIN P ON PD.PrdFK = P.PrdID
    INNER JOIN PR ON PR.ChildCatFK = P.ChildCatFK
    WHERE PR.ParentCatFK = 6

    UNION ALL

    SELECT PD.RefCode
    FROM PR 
    INNER JOIN PD ON PR.PrdDetFK = PD.PrdDetID
    WHERE PR.ChildCatFK = 14

) subquery
ORDER BY RAND() 
LIMIT 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...