1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

UPDATE einer Tabelle von Datensätzen einer anderen

Dieses Thema im Forum "Oracle" wurde erstellt von TeddyRuxpin, 14 Dezember 2010.

  1. TeddyRuxpin

    TeddyRuxpin Neuer Benutzer

    Hallo,

    ich habe ein etwas wirres Oracle SQL-Problem. Die Datenbank ist 11g.

    Ich habe eine Tabelle TEMP, da steht eine PersonenID und ein SJ (Sterbejahr) drin,

    dann habe ich eine andere Tabelle, nennen wir sie hier mal DATEN, da steht die PersonenID als IDNR drin, sowie eine Spalte SJ, die aber noch leer ist. Diese Tabelle hat bereits andere zur IDNR zugehörige Einträge in weiteren Spalten ,die hier aber unerheblich sind.

    Alles in einem DB-Schema.

    Nun möchte ich die Spalte SJ in der Tabelle DATEN per UPDATE-Statement befüllen, und zwar mit den Inhalten aus SJ, die in der Tabelle TEMP drin stehen. Es muss natürlich zur PersonenID / IDNR passen. Es sind selbstverständlich mehrere Datensätze die upgedatet werden sollen.

    Ich habe nun verschiedene Varianten ausprobiert, aber entweder hat das System nach 24 h immernoch kein ergebnis geliefert, wenn es gearbeitet hat, oder ich hab ne Fehlermeldung bekommen.

    Fehlermeldung:
    Ich verstehe zwar die Meldung, aber ich habe keinen Plan, wie ich das korrigieren soll.

    Ich habe folgendes Statement probiert:
    Code:
    update daten d
    set SJ = (  select distinct t.SJ from temp t, daten d
                where t.personen_id = d.idnr)
    where d.idnr = (select distinct d.idnr from temp t, daten d
    where t.personen_id = d.idnr);
    Kann mir jemand helfen, wie ich o.g. Problem lösen kann? :confused:
    Sämtliche Anleitungen im Internet fruchten bei mir nicht, also bitte keine Links....
    Danke im Voraus!
     
  2. thomas_w

    thomas_w Datenbank-Guru

    AW: UPDATE einer Tabelle von Datensätzen einer anderen

    Bei der Abfrage:
    Code:
    update daten d
       set SJ = (select distinct t.SJ from temp t, daten d
                  where t.personen_id = d.idnr)
    where d.idnr = (select distinct d.idnr from temp t, daten d
                     where t.personen_id = d.idnr)
    
    liefert der SUB-SELECT für "SET SJ = (SELECT ...)" mehr als ein Ergebnis.
    Das bedeutet, die Person ist mehrmals gestorben. Welches des Sterbejahre soll nun verwendet werden?
    Das kleinste MIN(t.SJ), das größte MAX(t.SJ) oder ein Durchschnitt AVG(t.SJ)?
    => Jedenfalls produziert Dein Abfrage doppelte Daten.

    Die WHERE Klausel kannst Du vermutlich weglassen,
    da dies bereits durch den SUB-Select geregelt wird.

    Lösung 1:
    Code:
    update daten d
       set SJ = (select t.SJ from temp t
                  where t.personen_id = d.idnr)
    
    Lösung 2:
    Code:
    update daten d
       set SJ = (select MAX(t.SJ) from temp t
                  where t.personen_id = d.idnr)
    
    Grüße
    Thomas
     
Die Seite wird geladen...

Diese Seite empfehlen