在MySQL中使用ID替换列

在MySQL中使用ID替换列,mysql,sql,Mysql,Sql,(对SQL来说是相当陌生的,所以请耐心听我说:)) 我有一个包含两个条目的表: 表1: 身份证件 所有者 捐赠者 陛下 ET1 12 琼斯 雏菊 上下快速移动 18 18 欧文斯 雏菊 上下快速移动 834 在进行更新之前,我强烈建议采取以下两项预防措施: 备份表-如果更新错误,可以从备份中恢复 在转到更新之前,运行选择查询,查看要更新的内容 此外,我支持@Akina的评论,为原始的ET1或更新的ET1添加了一个参考列 那么,让我们看看这个查询: SELECT * FROM table1 a

(对SQL来说是相当陌生的,所以请耐心听我说:)) 我有一个包含两个条目的表:

表1:

身份证件 所有者 捐赠者 陛下 ET1 12 琼斯 雏菊 上下快速移动 18 18 欧文斯 雏菊 上下快速移动 834
在进行更新之前,我强烈建议采取以下两项预防措施:

  • 备份表-如果更新错误,可以从备份中恢复
  • 在转到
    更新
    之前,运行
    选择
    查询,查看要更新的内容
  • 此外,我支持@Akina的评论,为原始的
    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