执行UPDATE查询时检查存在的值

时间:2011-01-16 15:46:26

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

我需要执行一个简单的更新查询,只有在没有更新值(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"

您能否在此解释错误,我该如何实现?

谢谢

3 个答案:

答案 0 :(得分:0)

您可以在item_name字段上放置一个唯一约束并捕获错误。

答案 1 :(得分:0)

我认为你不能在insert语句中为表使用别名。也可以使用而不是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'

答案 2 :(得分:0)

正如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