SQL查询组合6个表(具有相同的字段)

时间:2017-11-08 22:26:09

标签: mysql sql database database-design mariadb

我很难找到解决方案,我希望有人可以帮助我。 有6个不同的商店有不同的产品,有些商店在一些商店和其他商店不一致。

我有6个具有相同字段的表:缩写词,名称,类别,数量和值。 我需要将同一个表中的所有产品合并为"缩写"他们之间。

我的数据库不支持FULL OUTER JOIN功能。

我需要这样的回报:

(* Qtt =数量)

SQL RESULTS

2 个答案:

答案 0 :(得分:0)

说t1,t2,t3,t4,t5,t6是你的表。这应该让你开始:

select
     acro.acronym,t1.name t1name, t2.name t2name .....
from (
      select acronym from t1 union
      select acronym from t2 union
      select acronym from t3 union
      select acronym from t4 union
      select acronym from t5 union
      select acronym from t6
     ) acro
left join t1 on acro.acronym = t1.acronym 
left join t2 on acro.acronym = t2.acronym 
left join t3 on acro.acronym = t3.acronym 
left join t4 on acro.acronym = t4.acronym 
left join t5 on acro.acronym = t5.acronym 
left join t6 on acro.acronym = t6.acronym 

子查询acro只是从6个表中构建一个唯一的缩略词列表,然后左边连接源表将数据与每个(和所有)缩略词对齐。

答案 1 :(得分:0)

这假设它们没有相同的列:

CREATE TABLE AllData
( SELECT acronym, this, that, ... FROM t1 )
UNION ALL
( SELECT acronym, this, NULL as that, ... FROM t2 ) -- no "that" in t2
UNION ALL
( SELECT acronym, NULL as this, that, ... FROM t3 ) -- no "this" in t3
...

如果acronymPRIMARY KEY,那么就这样开始:

CREATE TABLE AllData ( PRIMARY KEY(acronym) )
( SELECT ...

如果您需要新的AUTO_INCREMENT,请执行以下操作:

CREATE TABLE AllData ( id INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(id) )
( SELECT ...

如果他们确实有相同的列,请忽略我关于NULL as ...的说明。