объединение двух столбцов в отдельных таблицах - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь написать SQL-запрос, в котором подсчитываются строки двух столбцов, которые находятся в разных таблицах, объединенных с помощью UNION ALL.

SELECT SUM(usernames) AS total 
   FROM 
   ((SELECT count(username) AS usernames 
        FROM table1 
        WHERE columa < '20' AND columnb = 'c' ) 
   UNION ALL 
   (SELECT count(name) AS usernames 
       FROM table2 
       WHERE columna2 < '20' and columnb2 = 'Cat' ))

Конечно, это не работает.Я запустил этот оператор в phpMyAdmin, и он выдал ошибку ....

Каждая производная таблица должна иметь свой собственный псевдоним.

Поэтому переписал оператор SQL как...

SELECT SUM(usernames) AS total 
   FROM 
   ((SELECT count(username) AS usernames 
        FROM table1 a 
        WHERE a.columa < '20' AND a.columnb = 'c' ) 
   UNION ALL 
   (SELECT count(name) AS usernames 
       FROM table2 b 
       WHERE b.columna2 < '20' and b.columnb2 = 'Cat' ))

Это также дает мне ту же ошибку ...

Каждая производная таблица должна иметь свой собственный псевдоним.

Что такоея здесь скучаю?

Ответы [ 3 ]

0 голосов
/ 30 мая 2018

Проблема не в круглых скобках - они подходят для большинства баз данных.Вам просто нужен псевдоним после последнего:

SELECT SUM(usernames) AS total 
FROM ((SELECT count(username) AS usernames 
       FROM table1 a 
       WHERE a.columa < '20' AND a.columnb = 'c' 
      ) UNION ALL 
      (SELECT count(name) AS usernames 
       FROM table2 b 
       WHERE b.columna2 < '20' and b.columnb2 = 'Cat'
      )
     ) t
-------^ voila!

Это может показаться немного запутанным, но подзапросы для union all do not принимают псевдонимы.Они необходимы (в MySQL) для подзапросов, которые ведут себя как таблицы в предложении from.

0 голосов
/ 30 мая 2018
SELECT *
  FROM 
     ( SELECT 1 n) -- this a derived table, with a column alias (n)
     x -- and this is a table alias for said table
0 голосов
/ 30 мая 2018

В операторах выбора отсутствует псевдоним, а не table1 и table2.Попробуйте удалить скобки:

SELECT SUM(usernames) AS total 
   FROM 
   (SELECT count(username) AS usernames 
        FROM table1 
        WHERE columa < '20' AND columnb = 'c'  
   UNION 
   SELECT count(name) AS usernames 
       FROM table2 
       WHERE columna2 < '20' and columnb2 = 'Cat' ) a

Или создать псевдонимы:

SELECT SUM(usernames) AS total 
   FROM 
   ((SELECT count(username) AS usernames 
        FROM table1 
        WHERE columa < '20' AND columnb = 'c' )  a
   UNION ALL 
   (SELECT count(name) AS usernames 
       FROM table2 
       WHERE columna2 < '20' and columnb2 = 'Cat' ) b) c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...