MySQL - 表指定两次作为更新目标和作为数据的单独来源

时间:2017-09-20 18:36:47

标签: mysql

当我尝试执行这两个查询时:

UPDATE bills
SET id_bill_tmp = (SELECT IFNULL(id_bill_tmp, 0)+1 AS id_bill_tmp FROM bills)
WHERE id_interess = 1;

UPDATE bills
SET id_bill_tmp = (SELECT max(id_bill_tmp)+1 FROM bills)
WHERE id_interess = 1;

我明白了:

  表'表'表'被指定两次作为更新'的目标。并作为   一个单独的数据来源

如何重写UPDATE以不报告此错误?

1 个答案:

答案 0 :(得分:1)

您无法通过在单个查询中获取同一表中的数据来更新表。至少你应该使用临时表,否则你应该使用视图

使用您的选择查询创建视图

CREATE VIEW `view_name` AS SELECT IFNULL(id_bill_tmp, 0)+1 AS id_bill_tmp FROM bills

然后使用视图

更新表
UPDATE bills
SET id_bill_tmp = (SELECT id_bill_tmp FROM view_name)
WHERE id_interess = 1;