MySQL更新连接未按预期工作

Jam*_*nan 0 mysql sql transactions join sql-update

我在ubuntu 12.10和MySQL Workbench上使用MySQL 5.1.41.

我有2个产品表,t1和t2.t1是实时数据,t2是准备更新到t1的导入数据,用于更新所有新产品价格.所以我跑:

SELECT * FROM t1
JOIN t2 ON t1.id = t2.id
WHERE t1.price != t2.price;
Run Code Online (Sandbox Code Playgroud)

这将返回1201记录,其中价格不同并需要更新.所以我跑:

UPDATE t1 JOIN t2 ON t1.id = t2.id
SET t1.price = t2.price
WHERE t1.price != t2.price;
Run Code Online (Sandbox Code Playgroud)

这完成没有错误并报告1143行受影响,行匹配:1143更改:1143警告:0

所以这里已有的东西不对.选择查询中有1201条记录不同,但只有1143条使用相同的连接和条件进行了更改?

运行初始选择查询我希望看到仍有不同价格的58条记录.但是当它运行时,我得到了与我最初相同的1201.就像没有提交更新一样.

有任何想法吗?

ype*_*eᵀᴹ 5

1201SELECT显示的数字()不是两个表中的t1行的记录JOIN.如果这两者id不是两者都是UNIQUE,PRIMARY KEY那么这是预期的.一些t1匹配多行的行t2.但是当UPDATE完成它们时它们只更新一次(这是在更新语句期间顺序UPDATE检查WHERE条件的MySQL"特征"或"错误" .

试试这个,看看t1应该更新多少行:

SELECT * FROM t1
WHERE EXISTS
      ( SELECT *
        FROM t2
        WHERE t1.id = t2.id
          AND t1.price != t2.price
      );
Run Code Online (Sandbox Code Playgroud)