2017-05-08 52 views
0

表架构:如何将某些行的列值设置为与同一表中的其他行相同?

+----------------------+---------------+------+-----+---------+-------+ 
| Field    | Type   | Null | Key | Default | Extra | 
+----------------------+---------------+------+-----+---------+-------+ 
| name     | varchar(10) | YES | MUL | NULL |  | 
| slno     | varchar(20) | YES |  | NULL |  | 
| type     | int(2)  | YES |  | NULL |  | 
| details    | text   | YES |  | NULL |  | 
+----------------------+---------------+------+-----+---------+-------+ 

名称,slno并键入一起形成键。

的样本数据:

+---------+------+------+-------------------------------+ 
| name | slno | type | details      | 
+---------+------+------+-------------------------------+ 
| name1 | 11 | 1 | {"data":["feats1","feats2"] } | 
| name1 | 11 | 2 | {"data":["feats1","feats2"] } | 
| name1 | 12 | 1 | {"data":["feats5","feats6"] } | 
| name1 | 12 | 2 | {"data":["feats5","feats6"] } | 
| name2 | 11 | 1 | {"data":["feats3","feats4"] } | 
| name2 | 11 | 2 | {"data":["feats3","feats4"] } | 
| name2 | 12 | 1 | {"data":["feats7","feats8"] } | 
| name2 | 12 | 2 | {"data":["feats10"] }   | 
+---------+------+------+-------------------------------+ 

所以基本上与NAME = '名称1' 中的每个条目,有一个与同slno但名称= '名2' 类似的条目。
我想要做的是对具有相同slno和类型但名称不同的行设置相同的细节,即上面的示例数据集应该如下所示。 name2行'的细节应该匹配name1行的细节,如果他们有相同的slno和类型。

+---------+------+------+-------------------------------+ 
| name | slno | type | details      | 
+---------+------+------+-------------------------------+ 
| name1 | 11 | 1 | {"data":["feats1","feats2"] } | 
| name1 | 11 | 2 | {"data":["feats1","feats2"] } | 
| name1 | 12 | 1 | {"data":["feats5","feats6"] } | 
| name1 | 12 | 2 | {"data":["feats5","feats6"] } | 
| name2 | 11 | 1 | {"data":["feats1","feats2"] } | 
| name2 | 11 | 2 | {"data":["feats1","feats2"] } | 
| name2 | 12 | 1 | {"data":["feats5","feats6"] } | 
| name2 | 12 | 2 | {"data":["feats5","feats6"] } | 
+---------+------+------+-------------------------------+ 

我试过了,但是不能拿出执行上述结果的命令。有人可以帮忙吗?

+0

所以slno和细节应该形成一个单独的表? – Strawberry

+0

不,我给出了样本数据(第二个表格)以及它应该如何转换到下面(最后一个表格) – user3248186

+0

您如何选择给定'slno/type'对的参考值?我的意思是,你为什么选择'name1'的值而不是'name2'的值? –

回答

0

如果要求给NAME2详细介绍了值从NAME1的详细信息,你可以做到这一点在MySQL与join基于更新

update yourTable as t1 
join yourTable as t2 
on  t1.slno = t2.slno and 
     t1.type = t2.type 
set  t2.details = t1.details 
where t2.name = 'name2' and 
     t1.name = 'name1' 

可以达到同样也朝着我放在where条件子句的join条件

update yourTable as t1 
join yourTable as t2 
on  t1.slno = t2.slno and 
     t1.type = t2.type and 
     t2.name = 'name2' and 
     t1.name = 'name1' 
set  t2.details = t1.details 

你可以看到在行动这两个查询here

相关问题