2015-11-10 2 views
2

Вот мои таблицы:Как столбцы SUM из трех таблиц mysql?

Table1

----------------- 
    ID | value 
----------------- 
    1 | 0  
-----------------  
    2 | 3 
----------------- 
    3 | 10 
----------------- 

table2

----------------- 
    ID | value 
----------------- 
    3 | 4  
----------------  
    5 | 6 
----------------- 
    6 | 8 
----------------- 

Таблица3

----------------- 
    ID | value 
----------------- 
    7 | 7  
----------------  
    8 | 8 
----------------- 
    9 | 9 
----------------- 

таблица результатов

----------------- 
     ID | value 
    ----------------- 
     1 | 0  
    ----------------  
     2 | 3 
    ----------------- 
     3 | 14 
    ----------------  
     5 | 6 
    ----------------- 
     6 | 8 
    ----------------- 
     7 | 7  
    ----------------  
     8 | 8 
    ----------------- 
     9 | 9 
    ----------------- 

Я задаюсь вопросом, как сделать сумму на Value колонке на table1, table2 и table3 достичь Result таблицы?

Запрос, который я написал это:

INSERT INTO result (ID, value) 
SELECT ID, SUM(t1.value+ t2.value, t3.value) 
FROM table1 t1, table2 t2, table3 t3 
GROUP BY ID 

Но это просто виснет (фактические столы большие), и я сомневаюсь, что это правильно, как ID s не то же самое в table1 и table2

+1

Это крест, соединяющий a.k.a. декартово произведение, все перестановки на больших таблицах. 1m x 1m = 1 трлн – Drew

+0

ну на самом деле это неоднозначная ошибка 1052, но я получаю идею – Drew

ответ

4

Вот способ получить сумму за идентификатор с помощью union all

select id, sum(value) from (
    select id, value from table1 
    union all select id, value from table2 
    union all select id, value from table3 
) t group by id 

union all объединяет результаты каждого оператора выбора в один большой результат (часть all гарантирует, что повторяющиеся строки не удаляются автоматически), и, наконец, объединенный результат сгруппирован и суммируется как обычно.

+0

Ницца. Но что, если есть 3 таблицы? – Jand

+1

@Jand вы можете добавить дополнительный 'union all select ...' для дополнительных таблиц – FuzzyTree

+0

Извините, я не смог продлить его до 3 таблиц, поэтому просто изменил свой вопрос. Вы измените ответ, пожалуйста? – Jand

Смежные вопросы