2013-04-23 7 views

Antwort

25

Dies funktioniert für mich

select * from stuff 

update stuff 
set TYPE1 = TYPE2 
where TYPE1 is null; 

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

select * from stuff 
+0

Ja, du hast Recht. Aber nachdem ich die update-Anweisungen einmal ausgeführt habe, würde ich die select-Anweisung erneut ausführen ... aber keine Änderung. Gibt es nach jedem Lauf eine neue Instanz einer Geige? – Keven

+1

@Keven Ja, jede SQLFiddle-Ausführung ist unabhängig von der vorherigen Ausführung. –

2

Sie setzen ausgewählte Abfrage vor Update-Abfragen, so dass Sie nur die ersten Daten sehen. Setzen Sie select * from stuff; an das Ende der Liste.

1

Ihre select-Anweisung vor der Update-Anweisung war zu sehen Updated fiddle

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

, um für beide "a" und "b" zu arbeiten, müssen beide Aliase definiert werden

+0

funktioniert die angenommene Antwort, aber das ist ein bisschen direkter und auf den Punkt – hanzolo

+0

habe ich einen Punkt subtrahiert, weil dieser eigentlich meine ursprüngliche Frage nicht beantwortet. Ich wollte einen Wert von 'TYPE1' mit dem Wert von' TYPE2' in der gleichen Tabelle aktualisieren. – Keven

+0

Tatsächlich beantwortet das obige Beispiel die Frage, weil der JOIN in der gleichen Tabelle wie die FROM-Anweisung ausgeführt wird. Wenn Sie genau hinsehen, wird "myTable" zweimal referenziert. Es ist nur ein wenig ausführlicher als die angenommene Antwort. – mastazi

3
UPDATE TABLE_NAME SET COLUMN_A = COLUMN_B; 

Viel einfacher. Zumindest bei Oracle SQL weiß ich nicht, ob dies auch bei anderen Dialekten funktioniert.

+0

Ja, funktioniert auch für SQL Server (so ist Ihre Antwort für diese Frage perfekt gültig). –

+0

Ich habe einen Fehler erhalten: Unterabfrage hat mehr als 1 Wert zurückgegeben. Dies ist nicht zulässig, wenn die Unterabfrage =,! =, <, <= , >,> = oder wenn die Unterabfrage als Ausdruck verwendet wird. –

Verwandte Themen