我有 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]
作为新表中所需的值。
以下是手册的相关部分,以了解更多详细信息。
- INSERT...SELECT syntax - 有关
INSERT SELECT
语句的详细信息 - JOIN syntax - 有关在查询中
JOIN
表的详细信息
关于mysql - MySQL中多表通过联合主键垂直合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2823614/