2017-04-07 1 views
0

ich die unten Datendiskrepanz in einigen der Tabellen haben, die Update-Abfragen in SQL verwendet werden muss korrigiertSQL: Tabellendaten vergleichen und aktualisieren Sie den richtigen Wert in Tabellen

der Master-Tabelle (Tabelle A nehmen) Tabelle enthält 2 Primärschlüsselwert für das gleiche Produkt wie unten,

------------------ 
PRRFNBR|PRNBR 
-------|-------- 
XXXX |123 
YYYY |123 
---------------- 

Und diese in zwei Tabellen verwendeten Referenzschlüssel wie unten,

Tabelle B:

---------------------- 
SUPRFNBR |SUSPRNBR 
--------------------- 
XXXX  | 234 
------------------- 

Tabelle C:

------------------- 
SEPRFNBR | SESUPRNBR 
------------------- 
YYYY  | 435 
-------------------- 

Jetzt muss ich alle diese drei Tabellen vergleichen und die SEPRFNBR in Tabelle C mit dem Referenzschlüssel in Tabelle B (SUPRFNBR) (wie der Referenzschlüssel XXXX muss aktualisiert werden wenn die gleiche PRNBR in Tabelle C aktualisiert 2 Primärschlüsselwerte in Tabelle A mit)

+0

Können Sie bitte etwas mehr über die Logik erklären. Bisher denke ich, dass Sie möchten, dass Tabelle C auf die Mehrheit von Tabelle A und B aktualisiert wird - was meinen Sie mit dem letzten Satz? Weitere Details oder Beispiele wären hilfreich. – MichaelTiefenbacher

+0

Hallo Michael, die Logik funktioniert so, wenn ich einen Datensatz in TABELLE C einfüge, verwendet er eine andere Referenznummer aus TABELLE A anstelle der gleichen Referenznummer, die in TABELLE B verwendet wird (wie wenn xxxx verwendet wird) Tabelle b dann verwendet das Programm YYYY aus Tabelle C anstelle von XXXX Ich kann die Einfügefunktion jetzt nicht mehr ändern, da aktive Aufträge den beiden Referenznummern zugeordnet sind, daher muss ich als Problemumgehung die Datensätze in TABELLE C mit aktualisieren Die gleiche Referenznummer wird in Tabelle B (XXXX) verwendet, wenn die angegebene Zeile mehr als 2 Referenznummern in Tabelle A) hat. –

+0

Meinen Sie, dass Sie in Tabelle C YYYY zu XXXX ändern möchten? –

Antwort

0

Ihre Logik - soweit verstanden - braucht nicht einen Verweis auf Tabelle A als andere SUPRFNBR & SEPRFNBR für das Update qualifizieren würde

update c set SEPRFNBR = (select SUPRFNBR from b where b.SUPRNBR = c.SEPRNBR) 

Wenn aus irgendeinem (nicht beschriebenen) Grunde der Lookup-Tabelle A erforderlich ist, könnte es so erweitert werden, so etwas wie

update c set SEPRFNBR = (select SUPRFNBR from b 
          where b.SUPRNBR = c.SEPRNBR) 
          and (select count(*) from a 
            where b.SUPRNBR = a.PRNBR) > 1)" 

Sie die Lösung in Abhängigkeit von anderen Nebenbedingungen variieren können Sie haben. Dies ist nur eine Lösungsidee.

+0

Danke Michael für die SQL's. Jetzt habe ich die Werte in Tabelle B und Tabelle C geändert, um die in der Datenbank verfügbaren Daten anzuzeigen. Tabelle B & C enthält nur die Referenznummern, nicht die tatsächlichen Produktnummern, um eine direkte Aktualisierung durch Referenzieren der Tabelle B & C durchzuführen. Könnten Sie bitte einen Blick darauf werfen und mir mitteilen, wie der Referenzschlüssel in TABELLE C wie TABELLE aktualisiert wird B? –

+0

Es gibt also keine Möglichkeit zu überprüfen, ob zwei Nummern (die zusammengehören) in Tabelle A enthalten sind und die von Ihnen beschriebene Logik unvollständig ist. – MichaelTiefenbacher

+0

Ich habe weitere Details in den folgenden Link hinzugefügt, http://stackoverflow.com/questions/43365754/compare-rows-using-a-cursor-in-db2-and-perform-update könnten Sie bitte einen Blick darauf werfen und lassen Sie mich wissen, wie Sie die erwarteten Ergebnisse mit Cursoren in db2 erhalten? –

Verwandte Themen