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

Mysql 如何将某些行的列值设置为与同一表中其他行的列值相同?,mysql,sql,Mysql,Sql,表架构: +----------------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------------+---------------+------+-----+---------+-------+ | name | varc

表架构:

+----------------------+---------------+------+-----+---------+-------+
| 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"] }         |
+---------+------+------+-------------------------------+
因此,基本上,对于每个名称为'name1'的条目,都有一个类似的条目具有相同的slno,但名称为'name2'。
我想做的是为具有相同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"] } |
+---------+------+------+-------------------------------+

我试过了,但没能想出一个命令来执行上面的结果。有人能帮忙吗?

如果要求为name2details提供name1details中的值,您可以在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

您可以看到两个查询都在运行

,因此slno和details应该形成一个单独的表?不,我给出了示例数据(第二个表)以及它下面应该如何转换(最后一个表)。您如何为给定的
slno/type
组合选择参考值?我的意思是,为什么选择
name1
的值而不是
name2
的值?这是我的要求-将name1的详细信息分配给相应的name2的详细信息