mysql - MySQL中多表通过联合主键垂直合并

标签 mysql join merge

我有 3 个 MySQL MyISAM 表:table1、table2 和 table3。 每个表都有一个ID列(分别为ID、ID2、ID3),以及不同的数据列。

例如 table1 有 [ID、姓名、生日、状态...] 列,
表2有[ID2,国家/地区,邮政编码,...],
table3 有 [ID3、来源、电话、...]
你明白了。

ID、ID2、ID3 列对于所有三个表都是通用的...如果 table1 中有 ID 值,它也会出现在 table2 和 table3 中。这些表中的行数是相同的,每个表中大约有 10m 行。

我想做的是创建一个新表,其中包含所有三个表的(大部分)列并将它们合并到其中。 例如,必须转换日期,因为它们现在采用 VARCHAR YYYYMMDD 格式。阅读 MySQL 手册,我认为 STR_TO_DATE() 可以完成这项工作,但我不知道如何编写查询本身,所以我不知道如何集成日期转换。

所以基本上,在创建新表(我确实知道该怎么做)之后,如何将三个表合并到其中,并将日期转换集成到查询中?

更新:

我唯一不清楚的是如何转换查询中的日期。 据我了解,查询应该是这样的:

INSERT INTO [new table] 
SELECT table1.ID, table1.Name, table1.Birthday, table2.Country, table3.Phone
FROM table1 
INNER JOIN table2 ON table1.ID = table2.ID2 
INNER JOIN table3 ON table1.ID = table3.ID3;

...但是我如何转换其中的日期呢?或者就此而言,在插入字段之前将任何函数应用于字段?例如,如何在使用 STR_TO_DATE() 插入生日字段之前对其进行转换?我该把它放在哪里?

STR_TO_DATE(table1.Birthday, '%Y%m%d')

[呃,我想用“STR_TO_DATE(table1.Birthday, ...)”替换“table1.Birthday”?这是正确的吗?]

最佳答案

看起来您想要一个 INSERT SELECT 查询,如下所示:

INSERT INTO [new table] 
SELECT [values] 
FROM table1 
INNER JOIN table2 on table1.ID = table2.ID2 
INNER JOIN table3 ON table1.ID = table3.ID3;

在其中填写[new table]作为新表的名称,并填写[values]作为新表中所需的值。

以下是手册的相关部分,以了解更多详细信息。

关于mysql - MySQL中多表通过联合主键垂直合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2823614/

相关文章:

php - 使用 php 更新表中的值

mysql - 合并 MySql 中多个表的结果

javascript - 如何合并对象?

mysql - 构建 docker 容器后运行自定义 SQL 查询

mysql - Laravel 5 表单信息突然变空

r - 使用 st_join 进行使用最大交叉点的空间连接

node.js - 如何使用 sequelize 进行 3 个连接?

Git p4 merge pull 请求

mysql - ASP.net C#——将来自 MySQL 的数据集合并到 SQL Server 2008 表中

php - 如何在 PHP/MySQL 中禁用用户帐户