【发布时间】:2011-10-27 04:48:09
【问题描述】:
我在 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;
这将返回 1201 条价格不同且需要更新的记录。所以我跑了:
UPDATE t1 JOIN t2 ON t1.id = t2.id
SET t1.price = t2.price
WHERE t1.price != t2.price;
这完成没有错误并报告 1143 行受影响,行匹配:1143 更改:1143 警告:0
所以这里已经有些不对劲了。 select查询中有1201条记录不同,但使用相同的连接和条件只有1143条改变?
运行初始选择查询,我希望看到 58 条价格仍然不同的记录。但是在运行它时,我得到了与最初相同的 1201。就好像没有提交更新一样。
有什么想法吗?
【问题讨论】:
-
两个表项的 ID 相同?
-
t1.price和t2.price列是否属于同一类型? -
sllev 的意思(我认为)是:两个表中的
id主键是什么?如果没有,那就是原因。 -
是的,两个 id 列都是 PK 和相同的数据类型
-
抱歉,我只是仔细检查了一下,t2.id 不是 PK 或 UNIQUE 并且包含重复项。
标签: mysql sql join transactions sql-update