Site icon Petar Karan

[mysql] #1093 – Table is specified twice, both as a target for ‘UPDATE’ and as a separate source for data

Questo errore si presenta quando si tenta di aggiornare una tabella prelevando i dati dalla medesima. Per comprendere il problema immaginiamo di avere una tabella come la seguente:

id indirizzo
1 http://indirizzosito.com/?opzione=
2 bianco
3 nero

Adesso supponiamo di volerla modificare in modo tale che il campo indirizzo all’id = 1 venga concatenato come prefisso su tutti gli altri campi indirizzo con id > 1. Quello che vogliamo ottenere è una tabella simile a questa:

id indirizzo
1 http://indirizzosito.com/?opzione=
2 http://indirizzosito.com/?opzione=bianco
3 http://indirizzosito.com/?opzione=nero

Prima di cominciare possiamo generare la tabella di prova con:

Ed inseriamo dentro i dati con:

A questo punto verrebbe spontaneo pensare che si possa utilizzare la seguente query (ATTENZIONE! Questa non funziona!):

Questa query produce però il seguente messaggio di errore:

#1093 – Table ‘t1’ is specified twice, both as a target for ‘UPDATE’ and as a separate source for data

L’errore dipende dal fatto che il database non ci consente di modificare una tabella dalla quale preleviamo contemporaneamente i dati. Possiamo aggirare il problema “ingannando” il database con la seguente modifica:

Faccio notare che a:

Abbiamo sostituito:

In questo modo la tabella viene per prima cosa prelevata e poi utilizzata per i dati dell’UPDATE.

Exit mobile version