我需要执行一个简单的更新查询,只有在没有更新值(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"
您能否在此解释错误,我该如何实现?
谢谢
答案 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