合并MySQL中的两个表

时间:2015-10-23 17:56:33

标签: mysql sql

表1:

| id            | int(11)      
| name          | varchar(255) 
| type          | varchar(255) 
| property1     | varchar(255) 
| property2     | varchar(255) 
| property3     | varchar(255) 

表2:

| id            | int(11)      
| name          | varchar(255) 
| type_level    | varchar(255) 
| property11    | varchar(255) 
| property12    | varchar(255) 
....
| property33    | varchar(255) 

这些表基本上代表同一个实体。 table1就像一个简短的属性列表,table2包含更多信息。

name属性在任何给定实体的两个表中具有相同的值, ID; typetype_level包含相同的值,但不幸的是,它们的名称不同。

我刚开始这个项目,我觉得这种情况不是很好,我想合并表格。

我想合并表来创建这个表:

table_merged

| id            | int(11)      
| name          | varchar(255) 
| type          | varchar(255) 
| property1     | varchar(255) 
| property2     | varchar(255) 
| property3     | varchar(255) 
| property11    | varchar(255) 
| property12    | varchar(255) 
| property13    | varchar(255) 
....
| property33    | varchar(255) 

结果表应该为每一行赋予唯一的ID,并且具有相同name的行应该连接在一行....

我希望我解释得很好。我怎么能做到这一点?我尝试INNER JOINUNION,但到目前为止还没有以正确的方式。

3 个答案:

答案 0 :(得分:1)

假设两个表中没有重复的名称并且它们匹配,您可以使用var colorArray = [ 'blue', 'purple', 'yellow', 'grey' ]; $scope.getRandomColorClass = new function() { return 'color-' + colorArray[Math.floor((Math.random() * colorArray.length))]; }; 执行所需的操作:

join

此版本为合并表添加了另一个新ID。

答案 1 :(得分:0)

创建一个新表,将AUTO INCREMENT分配给id,然后插入select:

 insert into table_merged (name,property1,....
 values(select a.name, a.property1, a.property2, a.property3, b.property11...
 from table1 a left join table2 b on a.name = b.name)

答案 2 :(得分:0)

在这种情况下似乎需要完全连接 - 行可能只在table1中,或者只在table2中,或者在两者中。 mysql的常见FULL JOIN解决方法是

SELECT t1.name,t1.type, t1.property1, ... , t2.proerty11, ...
FROM table1 t1 
LEFT JOIN table2 t2 ON (t1.name = t2.name and t1.type = t2.type_name )
UNION 
SELECT t1.name,t1.type, t1.property1, ... , t2.proerty11, ...
FROM table2 t2 
LEFT JOIN table1 t1 ON (t1.name = t2.name and t1.type = t2.type_name )