SQL使用重复信息更新数据

时间:2014-05-27 20:13:48

标签: mysql sql join

所以我一直在研究这个查询一段时间,并且出于某种原因,每当我运行它时,它都会尝试更新两个表中已经相等的某些字段。例如,取这两个表:

  

AlldataTable
  first__last__age__number
  K____ D __ 17____ 7   K____ D __ 15____ 7   X____ X___ 12 ____ 21

     

NewDataTable
  first__last__age__number
  K____ D __ 17____ 7   K____ D __ 15____ 7   X____ X___ 13 ____22

所以这里的目标是让x x的age字段更新为13,并在执行查询时将number字段更新为22。但是,当我执行代码时,它会说例如,只有第三个条目应该更新所有三个条目。

UPDATE AllDataTable
LEFT JOIN NewDataTable ON (AllDataTable.first = NewDataTable.first)
    AND (AllDataTable.last = NewDataTable.last)

SET AllDataTable.age = NewDataTable.age
    ,AllDataTable.number = NewDataTable.number
WHERE (
        AllDataTable.age <> NewDataTable.age
        OR AllDataTable.number <> NewDataTable.number
        )
    AND AllDataTable.first = NewDataTable.first
    AND AllDataTable.last = NewDataTable.last;

1 个答案:

答案 0 :(得分:0)

这是因为firstlast中的重复值。数据库在WHERE子句上看到三次点击:

  • Alldata第一行反对NewData第二行。
  • Alldata对NewData第一行的第二行。
  • Alldata第三排对阵NewData第三排。

这只会使一行的外观发生变化,但受影响的行数为3,因为第一行和第二行实际上交换了所有内容以及更新的第三行。