gpt4 book ai didi

MySQL 更新加入未按预期工作

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:55 25 4
gpt4 key购买 nike

我在 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

所以这里已经有些地方不对了。选择查询中有 1201 条记录不同,但使用相同的连接和条件只有 1143 条记录发生了变化?

运行初始选择查询时,我预计会看到 58 条价格仍然不同的记录。但是当运行它时,我得到了与最初相同的 1201。好像没有提交更新。

有什么想法吗?

最佳答案

SELECT 显示的数字 (1201) 不是 t1 的记录,而是来自 JOIN 的行两张 table 。如果两个 id 不是 UNIQUEPRIMARY KEY,那么这是预期的。 t1 的某些行匹配 t2 的多行。但是当 UPDATE 完成时,它们只更新一次(这是 UPDATE 的 MySQL“功能”或“错误”,检查 WHERE 条件在更新语句期间按顺序。

试试看应该更新多少行(t1):

SELECT * FROM t1
WHERE EXISTS
( SELECT *
FROM t2
WHERE t1.id = t2.id
AND t1.price != t2.price
);

关于MySQL 更新加入未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7064016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com