2015-08-19 2 views
0

У меня есть 2 стола. Первый из них обновляется ежедневно. (В этой таблице содержится более 10 столбцов, но 2 из них релевантны). Я бы хотел получать ежедневную статистику по vid (который является уникальным идентификатором) и популяцией. Новые идентификаторы VID могут появляться и исчезать каждый день. Например:MySQL слияние/объединение?

первый день:

vid population 
123 456 
124 567 
345 1024 

второй день:

vid population 
123 470 
124 520 
344 100 

Вторая таблица будет статистика, и я хотел бы следующий результат:

 |--------------------1st day data   
     |  |----------- 2nd day data 
vid stat0819 stat0820 
123 456  470 
124 567  520 
344 0  100 
345 1024  0 

Возможно ли это с одним SQL-запросом? Я думаю, что UNION является ключевым, но я не могу понять, как это сделать.

+0

В какой таблице будут данные 1-го дня на 2-й день? Не сохраняя данные 1-го дня где-то, я не вижу, как будет работать Союз или любой запрос. Вам нужно как-то архивировать историю (например, добавить триггер и другую таблицу, которая содержит все данные, не зависящие от дня, а затем запросить его). – xQbert

+0

вторая таблица хранит ее после обновления первой таблицы. В двух словах я хотел бы сохранить дневные значения во второй таблице. – smok3

+1

Чтобы достичь этого, вы должны динамически добавлять столбцы во вторую таблицу. в какой-то момент вы достигнете максимальных столбцов, разрешенных базой данных. Я считаю, что это [4096] (https://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html), что тогда? Возможно, вам лучше использовать триггер и иметь 3 столбца во 2-й таблице ... VID, население и «Дата», вы могли бы затем развернуть данные или обобщить результаты с помощью представлений и т. Д., Имея в виду, что вы все равно не можете превышать Максимальные столбцы разрешены в представлении. – xQbert

ответ

0

Возможно, вы ищите?

select tbl1.vid, tbl1.population as tbl1_population, tbl2.population as tbl2_population 
from tbl1 
left join tbl2 on tbl2.vid = tbl1.vid 

union 

select tbl2.vid, tbl1.population as tbl1_population, tbl2.population as tbl2_population 
from tbl1 
right join tbl2 on tbl2.vid = tbl1.vid; 
+0

'left join' недостаточно. – luoluo

+0

Отредактировал свой ответ. Это должно показать правильные данные –