【问题标题】:Check value existance while performing a UPDATE query在执行 UPDATE 查询时检查值是否存在
【发布时间】:2011-06-10 00:41:57
【问题描述】:

我需要执行一个简单的更新查询,如果没有更新值(item_name)的值,则应该只进行更新。例如,

数据库表 [item_types]

item_id(PK) | item_name

假设 item_id 为 6,我的尝试是

UPDATE item_types as k SET k.item_name = 'item_1' WHERE NOT EXISTS (SELECT * FROM item_types as a WHERE a.item_name = 'item_1') AND k.item_id = '6'

但这给了我错误

"You can't specify target table 'k' for update in FROM clause"

你能解释一下这里的错误吗?我怎样才能做到这一点?

谢谢

【问题讨论】:

    标签: mysql sql-update mysql-error-1093


    【解决方案1】:

    您可以对 item_name 字段设置一个独特的限制并捕获错误。

    【讨论】:

    • 是的,这是完成这项工作的好方法,但我需要弄清楚我的查询有什么问题,你能解释一下吗?
    【解决方案2】:

    我认为您不能在插入语句中为表使用别名。也使用 , 而不是 AND。

    试试

    UPDATE item_types SET item_name = 'item_1' WHERE NOT EXISTS (SELECT * FROM 
    item_types as a WHERE a.item_name = 'item_1') , item_id = '6'
    

    【讨论】:

    • 你的语句给我一个mySQL语法错误,你确定语法吗?
    【解决方案3】:

    正如 Toby 所建议的,您不能在 UPDATE 行中使用别名。请尝试以下语法:

    UPDATE item_types 
    SET item_name = 'item_1' 
    FROM item_types k
    WHERE NOT EXISTS (SELECT * FROM item_types as a WHERE a.item_name = 'item_1') 
    AND k.item_id = '6' 
    

    hth,R

    【讨论】:

      猜你喜欢
      • 2012-10-11
      • 2018-11-18
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多