【问题标题】:Mysql using update with sub queryMysql 使用带有子查询的更新
【发布时间】:2015-04-13 00:36:54
【问题描述】:

我想通过在 where 子句中使用子查询来更新表,但出现异常“您无法指定目标表 'catalog_category for update in FROM 子句'”。这是我的查询:

update catalog_category set `status` = "inactive"
where id_catalog_category in ( 
SELECT id_catalog_category
         FROM catalog_category t1 where (SELECT status
         FROM catalog_category t2
         WHERE t2.lft < t1.lft AND t2.rgt > t1.rgt
         ORDER BY t2.rgt-t2.lft ASC limit 1) = 'active' and status = 'inherited_inactive')

有什么办法可以修复这个错误吗?

【问题讨论】:

  • @starko 我不认为这是问题的重复,因为这里它是子选择和更新中的同一个表,而在你的问题中两者是不同的。
  • 我会将其拆分为 2 个查询:一个用于选择 ID,第二个用于更新。
  • 怎么可能 - status='active' 和 status='inherited_inactive'?总是假的。
  • @Sirko 是的,我们可以通过将其拆分为 2 个查询来轻松解决它。我问这个问题是因为我的要求需要将它合并到 1 个查询中。

标签: mysql


【解决方案1】:

使用以下 sql 进行更新:-

update catalog_category cc
      join (SELECT id_catalog_category
                 FROM catalog_category t1 where (SELECT status
                 FROM catalog_category t2
                 WHERE t2.lft < t1.lft AND t2.rgt > t1.rgt
                 ORDER BY t2.rgt-t2.lft ASC limit 1) = 'active' and status = 'inherited_inactive') tmp
    on cc.id_catalog_category = tmp.id_catalog_category
    set cc.`status` = "inactive"

【讨论】:

  • 谢谢普内特!您的查询有效,但我需要禁用 mysql 安全模式才能运行它
猜你喜欢
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 2016-05-13
  • 2011-12-02
  • 1970-01-01
  • 2016-05-03
相关资源
最近更新 更多