2013-04-23 3 views

risposta

25

questo funziona per me

select * from stuff 

update stuff 
set TYPE1 = TYPE2 
where TYPE1 is null; 

update stuff 
set TYPE1 = TYPE2 
where TYPE1 ='Blank'; 

select * from stuff 
+0

Sì, hai ragione. Ma dopo aver eseguito le istruzioni di aggiornamento una volta, avrei eseguito di nuovo l'istruzione select ... ma nessuna modifica. C'è una nuova istanza di violino dopo ogni corsa? – Keven

+1

@Keven Sì, ogni esecuzione di SQLFiddle è indipendente dalla corsa precedente. –

2

Si mette la query di selezione prima di aggiornare le query, quindi è sufficiente visualizzare i dati iniziali. Metti select * from stuff; alla fine della lista.

1

tuo select era prima della dichiarazione di aggiornamento vedere Updated fiddle

14
UPDATE a 
SET a.column1 = b.column2 
FROM myTable a 
INNER JOIN myTable b 
on a.myID = b.myID 

in modo che sia "a" e "b" a lavorare, entrambi gli alias deve essere definito

+0

la risposta accettata funziona, ma questo è un po 'più diretto e al punto – hanzolo

+0

ho sottratto un punto perché questo in realtà non risponde alla mia domanda originale. Volevo aggiornare un valore da 'TYPE1' con il valore di' TYPE2' nella STESSA TABELLA. – Keven

+0

In realtà l'esempio sopra riportato risponde alla domanda perché il JOIN è fatto sulla stessa tabella dell'istruzione FROM, se si guarda attentamente "myTable" viene referenziato due volte. È solo un po 'più prolisso della risposta accettata. – mastazi

3
UPDATE TABLE_NAME SET COLUMN_A = COLUMN_B; 

Molto più facile. Almeno su Oracle SQL, non so se funziona anche su altri dialetti.

+0

Sì, funziona anche per SQL Server (quindi la tua risposta è perfettamente valida per questa domanda). –

+0

Ho ricevuto un errore: la sottoquery ha restituito più di 1 valore. Ciò non è consentito quando la sottoquery segue =,! =, <, <= , >,> = o quando la sottoquery viene utilizzata come espressione. –