【问题标题】:MySQL Table merge / union?MySQL表合并/联合?
【发布时间】:2015-11-12 18:19:51
【问题描述】:

我有 2 张桌子。第一个每天刷新。(该表有超过 10 列,但其中 2 列是相关的)我想从 vid (这是一个唯一的 id )和人口中进行每日统计。新的 vid ID-s 每天都会出现和消失。例如:

第一天:

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 是关键,但我无法弄清楚如何。

【问题讨论】:

  • 第2天第1天的数据是什么表?如果不将第一天的数据存储在某处,我看不到联合或任何查询将如何工作。您需要以某种方式存档历史记录(例如添加一个触发器和另一个包含独立于日期的所有数据的表,然后查询它)
  • 刷新第一个表后,第二个表存储它。简而言之,我想将每日值存储在第二张表中。
  • 要实现这一点,您必须动态地将列添加到第二个表中。在某些时候,您会达到数据库允许的最大列数。我相信它是4096 然后呢?您最好使用触发器并在第二个表中有 3 列... VID、人口和“日期”,然后您可以使用视图等旋转数据或聚合结果。请记住,您仍然不能超过视图中允许的最大列数。
  • 我在刷新表格之前动态添加新列,我将删除第一列(1 或 4 周后,我还不知道)。但是每天1栏,4096栏就够11年了:)

标签: mysql merge union


【解决方案1】:

这可能是您要找的吗?

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;

【讨论】:

  • left join 还不够。
  • 编辑了我的答案。这应该显示正确的数据
猜你喜欢
  • 1970-01-01
  • 2013-09-07
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 2013-04-04
  • 1970-01-01
  • 2018-10-16
相关资源
最近更新 更多