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.就像没有提交更新一样.
有任何想法吗?
1201
您SELECT
显示的数字()不是两个表中的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)