首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将3个mysql表合并为一个没有重复项的表

将3个mysql表合并为一个没有重复项的表
EN

Database Administration用户
提问于 2018-05-17 23:06:10
回答 2查看 1.4K关注 0票数 1

我想合并3个表数据,每个表都有一个数字列,但是所有其他数据都不同。

我想要实现的是从公共列中选择所有数据,并根据number列从所有表中合并其余的列。

请记住,数字列在表之间可以有重复项。

代码语言:javascript
运行
复制
t1
------------------------------
| number | stuff 1 | stuff 2 |
------------------------------
|   1    |    x    |    y    |
------------------------------

t2
-------------------------------------------------------
| number | data 1 | data 2 | data 3 | data 4 | data 5 |
-------------------------------------------------------
|   2    |    a   |   b    |   c    |   d    |   e    |
-------------------------------------------------------

t3
----------------------------------------------
| number | info 1 | info 2 | info 3 | info 4 |
----------------------------------------------
|   1    |   j    |   k    |   l    |   m    |
----------------------------------------------
|   3    |   j    |   k    |   l    |   m    |
----------------------------------------------

Merged Table
------------------------------------------------------------------
| number | stuff 1 | stuff 2 | data 2 | data 5 | info 1 | info 4 |
------------------------------------------------------------------
|   1    |    x    |    y    |        |        |   l    |   m    |
------------------------------------------------------------------
|   2    |         |         |    b   |    e   |        |        |
------------------------------------------------------------------
|   3    |         |         |        |        |    l   |    m   |
------------------------------------------------------------------

不能重复实际编号,但该数字的3个表之间的任何数据都必须合并为一行。

如果它能执行ON DUPLICATE KEY UPDATE,那么我可以每隔几天运行一次查询,以添加任何新数据。

提前谢谢你

EN

回答 2

Database Administration用户

发布于 2018-05-18 04:58:58

代码语言:javascript
运行
复制
SELECT tt0.number
     , tt1.`stuff 1`
     , tt1.`stuff 2`
     , tt2.`data 2`
     , tt2.`data 5`
     , tt3.`info 1`
     , tt3.`info 4`
FROM (   SELECT t1.number FROM t1
       UNION DISTINCT
         SELECT t2.number FROM t2
       UNION DISTINCT
         SELECT t3.number FROM t3
     ) tt0
LEFT JOIN t1 tt1 ON tt0.number = tt1.number
LEFT JOIN t2 tt2 ON tt0.number = tt2.number
LEFT JOIN t3 tt3 ON tt0.number = tt3.number

此查询假定number字段是每个表中的主键或至少是唯一键。

更新:

不幸的是,这给我带来了错误,说数字中有重复的条目。

如果您有错误,您描述的不是MySQL错误。

http://www.sqlfiddle.com/#!9/22d82dc/1

票数 1
EN

Database Administration用户

发布于 2018-05-22 13:01:53

模式大致类似于以下内容:

代码语言:javascript
运行
复制
create table t1 (
number1 text,
stuff1 text,
stuff2 text);

insert into t1 (number1,stuff1,stuff2) values ('1', 'x', 'y');

create table t2 (
number1 text,
data1 text,
data2 text,
data3 text,
data4 text,
data5 text);

insert into t2 (number1,data1,data2,data3,data4,data5) values('2','a','b','c','d','e');

create table t3 (
number1 text,
info1 text,
info2 text,
info3 text,
info4 text);

insert into t3 (number1,info1,info2,info3,info4) values ('1','j','k','l','m');
insert into t3 (number1,info1,info2,info3,info4) values ('3','j','k','l','m');

通过这个查询,您可以完全实现您想要的结果:

代码语言:javascript
运行
复制
select x.number1,max(stuff1) stuff1,max(stuff2) stuff2,max(data1) data1,max(data2)data2,max(data3) data3,max(data4) data4,max(data5) data5,max(info1) info1,max(info2) info2,max(info3) info3,max(info4) info4 
from (
select number1,stuff1,stuff2,null data1,null data2,null data3,null data4,null data5,null info1, null info2, null info3, null info4
from t1
union
select number1,null stuff1, null stuff2,data1,data2,data3,data4,data5,null info1, null info2, null info3, null info4
from t2
union
select number1,null stuff1, null stuff2,null data1,null data2,null data3,null data4,null data5,info1, info2, info3, info4
from t3) x
group by x.number1;

结果是:

代码语言:javascript
运行
复制
+---------+--------+--------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| number1 | stuff1 | stuff2 | data1 | data2 | data3 | data4 | data5 | info1 | info2 | info3 | info4 |
+---------+--------+--------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| 1       | x      | y      | NULL  | NULL  | NULL  | NULL  | NULL  | j     | k     | l     | m     |
| 2       | NULL   | NULL   | a     | b     | c     | d     | e     | NULL  | NULL  | NULL  | NULL  |
| 3       | NULL   | NULL   | NULL  | NULL  | NULL  | NULL  | NULL  | j     | k     | l     | m     |
+---------+--------+--------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/207121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档