我有一个汇总项目及其类别的表格。一个项目可以有多个类别。以下是简化的架构和示例数据:
表名称:外部引用,(itemID, catID) 定义为主键
itemID | catID
-------+-------
4059 | 159
4059 | 219
我还有一个类别合并功能。执行此操作时,我还将源类别中链接的产品移动到目标(合并)类别。为了将项目从类别 159 移动到类别 219,我使用如下 SQL:
UPDATE `xref` SET `catID` = 219 WHERE `catID` = 159
但是更新失败,因为已经存在 4059-219(PK 约束)。
期望的结果是
itemID | catID
-------+-------
4059 | 219
我无法在数据库上使用存储过程或函数,但可以在我的应用程序中实现所需的步骤。
- 有没有办法在 UPDATE 查询失败时删除行?
- 如何编写一个查询来“预测”将失败的 UPDATE 查询的行?类似于“返回同时具有 catID 219 和 159 的 itemID”。
SELECT * FROM xref WHERE catID IN (159, 219) GROUP BY itemID HAVING COUNT(*) >= 2
是正确的方法吗?
最佳答案
我无法使用@JNevill 的方法,因为我事先不知道受影响的 itemID。但这给了我这个两步解决方案的想法。
UPDATE IGNORE `xref` SET `catID` = 219 WHERE `catID` = 159
DELETE FROM `xref` WHERE `catID` = 159
感谢所有其他答案/评论。
关于mysql - 更新行,如果更新失败则删除同一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47356760/