通过联合主键垂直合并MySQL中的多个表

时间:2010-05-12 23:58:51

标签: mysql join merge

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

例如table1有[ID,Name,Birthday,Status,...]列,
table2有[ID2,Country,Zip,...],
table3有[ID3,Source,Phone,...]
你明白了。

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

我想要做的是创建一个新表,其中包含(大部分)所有三个表的列并将它们合并到其中。 例如,必须转换日期,因为它们现在是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')

[错误我认为只需将“table1.Birthday”替换为“STR_TO_DATE(table1.Birthday,...)”?这是正确的吗?]

1 个答案:

答案 0 :(得分:1)

您希望查询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]作为新表中所需的值。

有关详细信息,请参阅本手册的相关部分。