2013-04-23 6 views

Odpowiedz

25

Działa to dla mnie

select * from stuff 

update stuff 
set TYPE1 = TYPE2 
where TYPE1 is null; 

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

select * from stuff 
+0

Tak, masz rację. Ale po uruchomieniu instrukcji aktualizacji raz uruchomiłbym instrukcję select jeszcze raz ... ale bez zmian. Czy po każdym uruchomieniu pojawia się nowy przypadek skrzypiec? – Keven

+1

@Keven Tak, każde wykonanie instrukcji SQLFiddle jest niezależne od poprzedniego uruchomienia. –

2

Wstawiasz zapytanie do zapytania przed aktualizacją, więc widzisz tylko dane początkowe. Umieść select * from stuff; na końcu listy.

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

aby zarówno "a" i "b" do pracy, zarówno aliasy muszą zdefiniuj:

+0

zaakceptowana odpowiedź działa, ale jest to trochę bardziej bezpośrednie i do punktu – hanzolo

+0

Odjęty punkt, ponieważ to nie odpowiada na moje oryginalne pytanie. Chciałem zaktualizować wartość z 'TYPE1' o wartość z' TYPE2' W TEJ TABLICY. – Keven

+0

Właściwie powyższy przykład odpowiada na pytanie, ponieważ JOIN jest wykonywany na tej samej tabeli co instrukcja FROM, jeśli uważnie przyjrzeć się "myTable" jest przywoływany dwa razy. Jest tylko trochę bardziej gadatliwa niż zaakceptowana odpowiedź. – mastazi

3
UPDATE TABLE_NAME SET COLUMN_A = COLUMN_B; 

Znacznie łatwiej. Przynajmniej na Oracle SQL, nie wiem, czy to działa również na inne dialekty.

+0

Tak, działa również dla SQL Server (więc twoja odpowiedź jest całkowicie poprawna dla tego pytania). –

+0

Wystąpił błąd: podzapytanie zwróciło więcej niż jedną wartość. Nie jest to dozwolone, gdy podzapytanie następuje po =,! =, <, <= , >,> = lub gdy podzapytanie jest używane jako wyrażenie. –