Проверить наличие значения при выполнении запроса UPDATE - PullRequest
0 голосов
/ 16 января 2011

Мне нужно выполнить простой запрос на обновление, где обновление должно выполняться только в том случае, если нет значения с обновлением (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 голосов
/ 16 января 2011

Я не думаю, что вы можете использовать псевдоним для таблицы в инструкции вставки. Также используйте, а не И.

Попробуйте

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'
0 голосов
/ 17 января 2011

Как предположил Тоби, вы не можете использовать псевдоним в строке ОБНОВЛЕНИЕ. Попробуйте использовать следующий синтаксис:

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

0 голосов
/ 16 января 2011

Вы можете наложить уникальное ограничение на поле item_name и поймать ошибку.

...