MySQL псевдонимы подзапросов - PullRequest
0 голосов
/ 04 октября 2018

У меня есть таблица, состоящая только из двух столбцов: id1 и id2.Следующий запрос в MySQL работает просто отлично:

(select id1 as id, count(id1) as cnt
from my_table 
group by id1)
union all
(select id2 as id, count(id2) as cnt
from my_table
group by id2)

Если я хочу использовать вышеуказанный запрос в качестве подзапроса, мне нужно присвоить псевдоним каждой производной таблице - приведенный ниже код дает ошибку («каждая производная таблица должна иметь свойсобственный псевдоним "):

select id, cnt from
(select id1 as id, count(id1) as cnt
from my_table 
group by id1)
union all
(select id2 as id, count(id2) as cnt
from my_table
group by id2)

Но я не могу найти правильный синтаксис для псевдонима производных таблиц.Я экспериментировал с добавлением и удалением скобок, но пока не повезло.Для приведенного ниже запроса я просто получаю общую синтаксическую ошибку SQL:

select id, cnt from
(select id1 as id, count(id1) as cnt
from my_table 
group by id1) as tab1
union all
(select id2 as id, count(id2) as cnt
from my_table
group by id2) as tab2

Позже я захочу сделать что-то большее с этим подзапросом, а не просто выбирать id и cnt, но это упрощенный сценарий для поиска правильного синтаксиса для псевдонимов.подзапросы.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Чтобы завершить этот вопрос, вот синтаксис, необходимый для объединения двух производных таблиц:

SELECT id, cnt
FROM
(
    SELECT id1 AS id, COUNT(id1) AS cnt
    FROM my_table 
    GROUP BY id1
) AS tab1
UNION ALL
SELECT id, cnt
FROM
(
    SELECT id2 AS id, COUNT(id2) AS cnt
    FROM my_table
    GROUP BY id2
) AS tab2;

Демо

Вам нужны явные операторы выбора для каждого компонента подзапросов в UNION.Конечно, ответ @ fa06 - это то, что вы должны использовать, но если вам нужно пойти по этому пути, то вышеизложенный способ поможет вам с этим работать.

0 голосов
/ 04 октября 2018

Попробуйте ниже: поскольку вы объединяете все результаты, вам нужен только один псевдоним

SELECT id, cnt
FROM
(
    SELECT id1 AS id, COUNT(id1) AS cnt
    FROM my_table 
    GROUP BY id1
    UNION ALL
    SELECT id2, COUNT(id2)
    FROM my_table
    GROUP BY id2
) AS tab;
...