所以我一直在研究这个查询一段时间,并且出于某种原因,每当我运行它时,它都会尝试更新两个表中已经相等的某些字段。例如,取这两个表:
AlldataTable
first__last__age__number
K____ D __ 17____ 7 K____ D __ 15____ 7 X____ X___ 12 ____ 21NewDataTable
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;
答案 0 :(得分:0)
这是因为first
和last
中的重复值。数据库在WHERE子句上看到三次点击:
这只会使一行的外观发生变化,但受影响的行数为3,因为第一行和第二行实际上交换了所有内容以及更新的第三行。