0

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

数据库表 [item_types]

item_id(PK) | item_name

假设存在 6 的 item_id,我的尝试是

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"

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

谢谢

4

3 回答 3

0

我认为您不能在插入语句中为表使用别名。也使用 , 而不是 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'
于 2011-01-16T16:17:35.607 回答
0

您可以对 item_name 字段进行唯一限制并捕获错误。

于 2011-01-16T15:49:44.627 回答
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' 

h, R

于 2011-01-17T09:17:07.320 回答