2016-04-26 12 views
0

Ich verwende DB2 und bin ein Anfänger in SQL. Ich habe zwei Tabellen hier:UPDATE JOIN-Anweisung für DB2

Tabelle 1:

ID | PageID 
------------ 
1 | 101 
2 | 102 
3 | 103 
4 | 104 

Table2:

ID | SRCID | PageID 
-------------------- 
1 | 2 | 179 
2 | 3 | 103 
3 | 3 | 109 

Table2 und Tabelle 1 haben unterschiedliche Anzahl von Datensätzen. Table2.SCRID entspricht Table1.ID. Ich möchte die PageID in Tabelle2 aktualisieren, um zu folgen, was in PageID von Table1 angegeben wird, basierend auf der SRCID. Mein Endergebnis Table2 sollte sein:

ID | SRCID | PageID 
-------------------- 
1 | 2 | 102 
2 | 3 | 103 
3 | 3 | 103 

Wie kann ich dies für DB2 in SQL tun?

Ich habe versucht:

UPDATE table2 
    SET PageID = (SELECT t1.PageID from table1 as t1 join table2 as t2 
     WHERE t2.SCRID = t1.ID); 

Aber die oben nicht wie ich funktioniert: als SQL-Anweisung

wurde

DB21034E Der Befehl verarbeitet, da es kein gültigen Befehlszeilenprozessor Befehl war. Während der SQL-Verarbeitung zurückgegeben: SQL0811N Das Ergebnis einer skalaren Fullselect, SELECT INTO-Anweisung oder VALUES INTO-Anweisung ist mehr als eine Zeile. SQLSTATE = 21000

Das Problem hier ist, gibt es keine eindeutige Spalte für mich zu verbinden, so dass jede Spalte ein einzigartiges Ergebnis bekommt .. oder so scheint es mir. Bitte helfen Sie? :(

Antwort

0

Try this:

UPDATE table2 
SET table2.PageID = 
    (SELECT t1.PageID 
    FROM table1 t1 
    WHERE t1.id = table2.SCRID) 
WHERE EXISTS(
    SELECT 'TABLE1PAGE' 
    FROM table1 t1 
    WHERE t1.id = table2.SCRID) 

ich hinzugefügt haben EXISTS-Klausel NULL Zuordnung zu PageID von table2 zu verhindern

+0

Dieses Dank funktioniert :) – evkwan

+0

@evkwan: einen schönen Tag;)! –