2011-01-12 12 views
2

Wie kann ich StatusID in Tabelle X mithilfe der Tabelle Y aktualisieren?Update mit einem Select

Tabelle X hat SourceID und alte StatusID
Tabelle Y hat SourceID und neue StatusID

update x 
set StatusID= (select StatusID from Y) 
where 
SourceID = (select SourceID from Y) 

dies richtig ist? Ich habe Angst, die Abfrage auszuführen, falls es alles durcheinander bringt ....

Ich verwende Joins, um die StatusID für Tabelle Y zu bekommen, also denke ich, ich brauche eine SELECT.

Dies ist, wie ich SourceID und StatusID für Tisch Y bekommen

select t2.Sourceid, t3.ActionID 
from tblSource t2 
right join Y t1 on t1.BaselineSourceKey= t2.tempSourceID 
right join lkuActionCode t3 
     on t3.actioncode = CASE 
     WHEN t1.actionCode = 'R' THEN 'N' 
     WHEN t1.actionCode = 'B' THEN 'R' 
     WHEN t1.actionCode = 'A' THEN 'R' 
     WHEN t1.actionCode = 'E' THEN 'N' 
     WHEN t1.actionCode = 'F' THEN 'S' 
     WHEN t1.actionCode = 'G' THEN 'S' 
     WHEN t1.actionCode = 'K' THEN 'DP' 
     WHEN t1.actionCode = 'Q' THEN 'C' 
     WHEN t1.actionCode = 'S' THEN 'AER' 
     WHEN t1.actionCode = 'T' THEN 'AEN' 
     WHEN t1.actionCode = 'U' THEN 'C' 
     WHEN t1.actionCode = 'V' THEN 'UR' 
    WHEN t1.actionCode = 'W' THEN 'R'    
     END 
    where actionid <> 10 and actionid <> 8 and actionid <> 3 
+0

verwenden Was genau wollen Sie tun? Füllen Sie eine neue Spalte oder halten Sie die Daten aufeinander abgestimmt? – 182764125216

+1

Was tun Sie, wenn Sie mit 'StatusID von Y auswählen' mehr als eine Datenzeile abfragen? – VoodooChild

+1

Was Sie gepostet haben, ist das am meisten unterstützte Mittel zum Aktualisieren einer Tabelle basierend auf dem Wert eines anderen. MySQL und SQL Server sind die einzigen Datenbanken, von denen ich weiß, dass sie JOINs in der UPDATE-Syntax unterstützen. –

Antwort

3

Dies könnte

update x 
set StatusID= Y.StatusID 
from Y 
where y.SourceID = X.SourceID 

einfacher, wenn es Zugang ist, dann könnte man

update x inner join y on y.sourceid=x.sourceid 
set x.statusid = y.statusid 
+0

nein es ist sql, aber wo verwende ich meine Auswahl, um die richtigen Daten aus Tabelle Y zu bekommen? –

+0

Ich habe am Ende eine temporäre Tabelle mit der obigen Abfrage erstellt und meine Tabelle mit Ihrem Vorschlag aktualisiert, danke –

2

Ich bin nicht sicher, das funktioniert. Versuchen:

update x set StatusID=Y.StatusID 
from Y where (x.SourceID=Y.SourceID); 

ETA: Dies sollte in PostgreSQL arbeiten, aber ich bin mir nicht sicher über andere SQL-Dialekte.

1

AKTUALISIERT
In SQL Server können Sie dies tun:

UPDATE A 
SET A.StatusID= B.StatusId 
FROM TableX AS A 
JOIN TableY AS B 
ON A.SourceID = B.SourceID 

In Ihrer aktualisierten Frage, jetzt sind Sie nur ein SELECT tun, dann ist es nicht gonna Update jeder Datensatz überhaupt. Welche Datenbank benutzen Sie?

+0

SQL 2005. die Auswahl, die ich zeige, erhält die SourceID und die neue ActionID, die ich dann Tabelle X mit aktualisieren muss. aber ich kann nicht herausfinden, wie es geht .... –

+0

@xrum Gibt es einen Grund für all die 'richtigen Verbindungen' ?, weil schließlich Sie SourceID NULL auf die Ausgabe Ihrer' SELECT' – Lamak

1
update x, y 
    set x.StatusID=y.StatusID 
    where x.SourceID=y.SourceID 
+0

Ich bin verwenden können Joins, um die StatusID für Tabelle X zu erhalten, also denke ich, dass ich eine Auswahl verwenden muss. –

2
update x 
set StatusID = y.StatusID 
from x 
join y on x.SourceID= y.SourceID 
Verwandte Themen