tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
492
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    KITAEB KITAEB ist offline Grünschnabel
    Registriert seit
    Jan 2012
    Beiträge
    2
    Hallo,

    ich versuche ein Feld aus einer Tabelle (T1) mit einem Wert aus einer anderen Tabelle (T2) füllen zu lassen, wenn bestimmte Bedingungen erfüllt sind.
    Bedingungen:
    1. Die ID's (LID = FKLID) müssen die selben sein.
    2. Der Inhalt aus T1.Feld_1 muss ungleich T2.Feld_1 sein!

    Wenn dies der Fall ist, sollte der Wert aus T1.Feld_1 in das Feld T2.Feld_2 geschrieben werden.

    Bei meinem letzten Versuch, habe ich mich an einem Beitrag aus diesem Forum orientiert. Bekommen jedoch immer folgende Fehlermeldung:

    "ora-01427 single-row subquery returns more than one row"

    Der Versuch sah wie folgt aus:
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    UPDATE T2
    SET    T2.Feld_1 = ( 
                        SELECT T1.Feld_1 
                        FROM   T1 
                        WHERE  T1.Feld_1 <> T2.Feld_1 
                        AND    T2.LID = T1.FKLID 
                        )

    Hat jemand eine Idee, wo der Fehler liegen kann? Bin über jede Hilfe dankbar!

    MFG
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Jepp. Das Subquery liefert pro T2.LID mehrere Resultate. Du musst das irgendwie auf eines beschränken.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    KITAEB KITAEB ist offline Grünschnabel
    Registriert seit
    Jan 2012
    Beiträge
    2
    Danke erstmal für die Antwort!

    Da ich die LIDs kenne, die betroffen sind, habe ich das auch schon mal versucht, die T2.LID und die T1.FKLID mit den jeweiligen Werten zu versehen, z.B.: T2.LID = 41 and T1.FKLID = 41. Hat aber leider auch nichts gebracht. Es erschien die selbe Meldung.

    Oder meinst du was anderes****?
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Also, wenn du nur das Subquery ausführst
    Code sql:
    1
    2
    3
    4
    
    SELECT T1.Feld_1 
    FROM   T1 
    WHERE  T1.Feld_1 <> T2.Feld_1 
    AND    T1.FKLID = 42
    Dann darf da nur eine Zeile erscheinen. Wenn du mehrere hast, dann musst du die Daten weiter eingrenzen (WHERE oder/und GROUP BY).
    Das Subquery darf nur 1 Zeile haben - ansonsten kommt dein Fehler. Oracle weiss dann nicht, welchen der Werte es verwenden soll.
    Geändert von Yaslaw (25.01.12 um 14:07 Uhr) Grund: Mein Gott, welch Rechtschreibung....
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    tkeuk tkeuk ist offline Grünschnabel
    Registriert seit
    Jan 2012
    Beiträge
    3
    denke wenn du das Subquery weiter einschränkst sollte es gehen

    SELECT T1.Feld_1
    FROM T1
    WHERE T1.Feld_1 <> T2.Feld_1
    AND T2.LID = T1.FKLID AND T1.FKLID = 42

    du darfst auch wenn du weiter einschränkst NIE den Join der beiden Tabellen vergessen
    sonst hat Oracle keine Ahnung welcher der DS er nehmen soll

    Mfk
     

  6. #6
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    @tkeuk
    Nunja, er hat bei der id=42 das Problem. Einfach die Menge wieder auf id=42 bringt noch keinen Mehrwert. Er braucht weitere Kriterien oder ein GROUP BY oder sowas.
    Das von dir Fett markierte Teil ist soweit Richtig. Aber eignet sich nicht wenn er nur das Subquery testen soll. Im Gesammtkontex ist der ID-Vergleich soweit richtig, nicht jedoch der Vergleich auf 42, da dies ja nur ein Fall betrifft und für die restlichen Daten falsch ist.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  7. #7
    tkeuk tkeuk ist offline Grünschnabel
    Registriert seit
    Jan 2012
    Beiträge
    3
    @Yaslaw
    wo du recht hast hast du recht doch ich habe es im Kontext als Einzelquery angeschaut, sorry
     

Ähnliche Themen

  1. [Oracle 10g] Abfrage über zwei Tabellen
    Von Dr_Doom im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 02.06.09, 16:05
  2. SQL Abfrage über zwei Tabellen (Oracle)
    Von pam1906 im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 04.04.07, 16:13
  3. [Oracle] Update über zwei Tabellen
    Von m3000 im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 03.10.06, 15:34
  4. [SQL] Update über zwei Tabellen
    Von Hedonismbot im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 20.01.05, 20:57
  5. Update über zwei Tabellen
    Von kesnw im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 23.04.04, 19:35

Stichworte