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的详细信息