2016-06-02 3 views
1

Aus meiner Sicht diese AbfrageAktualisierung mit nicht in in-Klausel in mysql

UPDATE tab_antiguedad set rol_id = 4 
where ant_id = 29 
     and rol_id not in (
         select rol_id 
         from tab_antiguedad 
         where usu_id = 55 
         ) 

Where (select rol_id from tab_antiguedad where usu_id = 55) hier rol_id hat 4 und 3.

Aber den Fehler, den ich wirft arbeiten soll, ist:

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

Bitte helfen.

Antwort

0

Die Sache ist, dass Sie nicht die gleiche Tabelle aktualisieren können, die Sie im Auswahlteil verwendet haben.

UPDATE tab_antiguedad

set rol_id = 4

wo ant_id = 29 und

rol_id nicht in (wählen rol_id aus tab_antiguedad wo usu_id = 55)

+0

Also was wäre die Lösung? –

+0

Ich weiß nicht viel über Unterabfragen, da ich hauptsächlich einfache SQL-Befehle verwende, aber ich habe eine ähnliche Frage gefunden, von der ich denke, dass sie Ihnen helfen kann. Klicken Sie einfach auf [THIS] (http://stackoverflow.com/questions/13283940/select-query-in-where-clause-of-update-query?lq=1), um es zu öffnen. – Pic

0

Verwenden Sie den Alias ​​

UPDATE tab_antiguedad as t1, (select rol_id 
     from tab_antiguedad where usu_id = 55) as t2 
set t1.rol_id = 4 
where t1.ant_id = 29 
and t1.rol_id != t2.rol_id 
+0

Ergibt den folgenden Fehler: Sie können Zieltabelle 't1' für die Aktualisierung in FROM-Klausel –

+0

nicht angeben Ich habe die Antwort aktualisieren .. – scaisEdge

+0

Vielen Dank ScaisEdge, aber seltsamerweise nicht "nicht in" sollte nicht zulassen, wenn t1.rol_id 3 oder ist 4, indem Sie das Update zulassen? –

Verwandte Themen