在MySQL中使用ID替换列
(对SQL来说是相当陌生的,所以请耐心听我说:)) 我有一个包含两个条目的表: 表1: 身份证件 所有者 捐赠者 陛下 ET1 12 琼斯 雏菊 上下快速移动 18 18 欧文斯 雏菊 上下快速移动 834在MySQL中使用ID替换列,mysql,sql,Mysql,Sql,(对SQL来说是相当陌生的,所以请耐心听我说:)) 我有一个包含两个条目的表: 表1: 身份证件 所有者 捐赠者 陛下 ET1 12 琼斯 雏菊 上下快速移动 18 18 欧文斯 雏菊 上下快速移动 834 在进行更新之前,我强烈建议采取以下两项预防措施: 备份表-如果更新错误,可以从备份中恢复 在转到更新之前,运行选择查询,查看要更新的内容 此外,我支持@Akina的评论,为原始的ET1或更新的ET1添加了一个参考列 那么,让我们看看这个查询: SELECT * FROM table1 a
在进行更新之前,我强烈建议采取以下两项预防措施:
更新
之前,运行选择
查询,查看要更新的内容ET1
或更新的ET1
添加了一个参考列
那么,让我们看看这个查询:
SELECT * FROM table1 a
JOIN table1 b
ON a.Donor=b.Donor
AND a.Sire=b.Sire
AND a.ET1 > b.ET1;
查询中的table1
根据您的要求与条件上的自连接,我假设该条件下最小的ET1
值将被视为任何具有较大ET1
(或较大ID?)的记录的ET1
值。此查询将执行此操作,使用选择查询确认后,只需将查询更改为以下内容:
UPDATE table1 a
JOIN table1 b
ON a.Donor=b.Donor
AND a.Sire=b.Sire
AND a.ET1 > b.ET1
SET a.ET1=b.ET1;
根据Akina的建议,我认为应该是这样的:
添加一个新列,并使用原始的ET1
值更新新列
ALTER TABLE table1 ADD COLUMN RootET1 INT;
UPDATE table1 SET RootET1=ET1;
这会给你这样的东西:
身份证件
所有者
捐赠者
陛下
ET1
根1
12
琼斯
雏菊
上下快速移动
18
18
18
欧文斯
雏菊
上下快速移动
834
834
“我需要它们共享同一个ET1”-决定哪一个的逻辑是什么?其中t.ET1=t.ID
在一行中永远不会为真<代码>其中
仅比较单个行中的值。基本上,如果它们共享相同的供体和父系,则需要共享相同的ET1。ET1是我们最重要的功能,因为这是我们识别记录的方式-我们将始终搜索ET1,但我们可能已经更改了所有权,这意味着输入了新记录,只有所有者发生了更改。我正在寻找一个查询来帮助更新上面不正确的条目。而set t.ET1=t.ET1
只会将该值设置为自身。同样,t
一次只引用一行。PS。你的更新将永远杀死这些信息(但这些信息至少在历史上是有意义的)。我建议您创建并填充其他列,如RootET1
。