2011-01-16 10 views
0

Ich muss eine einfache Update-Abfrage durchführen, bei der die Aktualisierung nur durchgeführt werden soll, wenn es keinen Wert mit aktualisierendem Wert (item_name) gibt. Zum BeispielWert während der Ausführung einer UPDATE-Abfrage prüfen

DB-Tabelle [item_types]

item_id(PK) | item_name 

Angenommen, es existieren item_id mit 6 Mein Versuch ist

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' 

Aber das gibt mir

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

Könnten Sie Fehler Bitte erläutern Sie den Fehler hier und wie kann ich das erreichen?

Danke

Antwort

0

Sie eine einzigartige Zurückhaltung auf dem item_name Feld setzen konnte und den Fehler zu fangen.

+0

ja, es ist eine gute Art und Weise des Erhaltens dies getan, aber ich brauche, um herauszufinden, was das Problem mit meiner Anfrage, Könnten Sie bitte erklären? – nimo

0

Ich glaube nicht, dass Sie einen Alias ​​für eine Tabelle in einer Insert-Anweisung verwenden können. Verwenden Sie auch, anstatt AND.

Versuchen

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

Ihre Aussage, die mir einen Syntaxfehler mit mySQL gibt, sind Sie über Syntax sicher? – nimo

0

Als Toby vorgeschlagen, Sie einen Alias ​​in der UPDATE-Linie nicht verwenden können. Versuchen Sie, die folgende Syntax aber:

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