2016-11-17 5 views
-1

Можете ли вы объяснить мне, почему этот код не работает?Как получить данные из двух таблиц из базы данных?

SELECT SUM(`cash`) AS `cash`,COUNT(*) AS `rows` FROM `table_1` WHERE `login` = 'test' UNION ALL SELECT COUNT(*) AS `rows2` FROM `table_2` WHERE `login` = 'test'; 

В PhpMyAdmin Я вижу это сообщение:

1222 - Используемые ЗЕЬЕСТ имеют разное количество столбцов

И я не мог решить эту проблему.

+1

Ну, вы должны позаботиться о том, что результат наборы обоих одиночных запросов аналогичны по своей структуре, поэтому их можно объединить в одну таблицу. Как еще должен движок создать таблицу из этих двух наборов? – arkascha

+0

Хм, хорошо, но я новичок в MySQL. – Dawid77

+0

Можете ли вы показать мне пример кода? – Dawid77

ответ

0

UNION принимает результаты нескольких операторов SELECT и представляет их как единый результирующий набор. Но для этого количество столбцов в отдельных операторах SELECT должно быть одинаковым.

Чтобы понять это, он может помочь форматировать в запросе немного:

SELECT 
     SUM(`cash`) AS `cash`, 
     COUNT(*) AS `rows` 
    FROM `table_1` 
    WHERE `login` = 'test' 
UNION ALL 
    SELECT 
     COUNT(*) AS `rows2` 
    FROM `table_2` 
    WHERE `login` = 'test' 

Ваш первый запрос выбирает два столбца, денежные и строк. Второй запрос выбирает только один столбец, rows2. Также обратите внимание, что поскольку UNION объединяет результаты, вы можете также вызвать соответствующие столбцы в каждом запросе с тем же именем.

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

SELECT 
     SUM(`cash`) AS `cash`, 
     COUNT(*) AS `rows` 
    FROM `table_1` 
    WHERE `login` = 'test' 
UNION ALL 
    SELECT 
     NULL AS `cash` 
     COUNT(*) AS `rows` 
    FROM `table_2` 
    WHERE `login` = 'test' 
Смежные вопросы