表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; type
和type_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 JOIN
和UNION
,但到目前为止还没有以正确的方式。
答案 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 )