Oracle-SQL-update-basierend auf Unterabfrage zwischen zwei Tabellen

Ich bin derzeit am schreiben von update-Anweisungen zu halten, eine Abfrage-Tabelle können ständig up to date. Das schema ist identisch zwischen den beiden Tabellen und die Inhalte sind nicht wichtig:

STAGING  

ID  
NAME  
COUNT    

PRODUCTION  

ID  
NAME  
COUNT

Meine update-Anweisung sieht wie folgt aus:

update PRODUCTION  
set name = (select stage.name from staging stage where stage.name=name  and rownum <2),  
    count =   (select stage.countfrom staging stage where stage.count=count  and rownum <2);

Zwei Dinge beachten ist, dass 1) Es gibt keine where-Klausel am Ende von meinem update (kann dies das problem sein) und 2) alle Datensätze, nachdem er aktualisiert die gleichen Werte haben. Was ich damit meine, ist Folgendes:

BEFORE UPDATE:  

1,"JOHN", 12;  
2,"STEVE",15;  
3,"BETTY",2;  

AFTER UPDATE  

    1,"JOHN", 12;  
    2,"JOHN",12;  
    3,"JOHN",12;

Meine Frage ist, wie kann ich dieses Problem beheben, so dass die Tabelle korrekt widerspiegelt "neuen" Daten von Inszenierung als eine korrekte SQL-update?

UPDATE

Also meine staging-Daten könnten zufällig Spiegel, was ist in PRODUCTION und wegen der Diskussion wird es:

STAGING DATA TO MERGE:  

    1,"JOHN", 12;  
    2,"STEVE",15;  
    3,"BETTY",2; 

UPDATE die zweite

Die Abfrage, die ich gerne ausführen würde, dann dies:

update PRODUCTION
set production.name = staging.name,  
    production.count = staging.count

where production.name = staging.name;

Dies jedoch resultiert in Ungültiger Bezeichner Probleme auf "die Inszenierung.name"

  • Wollen Sie name und zählen in PRODUKTION - Tabelle up-to date und STAGING Tabelle ändern?
  • Warum nutzen Sie nicht die Trigger zum einfügen neuer Werte statt dieses update? was macht dieses update genau?
  • Vereinbart, bei der Synchronisierung von Tabellen, Triggern kann wirklich nützlich halten Sie up to date in Echtzeit. Just watch out für die mutierenden Tabelle Fehler, und sicher sein, es zu tun, als NACH der INSERT-ODER UPDATE.
  • Dieses update ist nur zum ziehen von Daten aus staging, um damit die Produktion auf dem neuesten Stand. Ähnlich wie Wetter Berichte gibts für ein real-life Beispiel. Alle X Minuten oder so
  • Dies wird höchstwahrscheinlich zu einem trigger, ich bin die Erprobung der plain-sql von selbst.
InformationsquelleAutor Woot4Moo | 2012-07-27
Schreibe einen Kommentar