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

Komplexe SQL-Abfrage mit Datenbanklink

Dieses Thema im Forum "Oracle" wurde erstellt von LLIILLAA, 4 August 2011.

  1. LLIILLAA

    LLIILLAA Neuer Benutzer

    Hallo Forum,

    ich würde gerne folgendes in einer Where-Bedingung tun:

    ....
    Where [Tabelle].[Spalte] = [Tabelle]@[Datenbanklink].[Spalte]

    Mir gelingt nicht eine Tabellenspalte mit einer anderen Tabellenspalte, über welche auf einen Datenbanklink zugegriffen wird, zu vergleichen.

    Gehe ich wie folgt vor:

    ...
    Where [Tabelle].[Spalte] In (Select [Spalte] From [Tabelle]@[Datenbanklink]

    erhalte ich folgendes:
    Unterabfrage für eine Zeile liefert mehr als eine Zeile

    Was mache ich falsch, kann mir jemand helfen?
    Vielen Dank im Voraus.
     
  2. ukulele

    ukulele Datenbank-Guru

    Schonmal
    Code:
    Where [Tabelle].[Spalte] In ( Select [Spalte] From [Schema].[Tabelle]@[Datenbanklink] )
    probiert?
     
  3. LLIILLAA

    LLIILLAA Neuer Benutzer

    Hallo Ukulele,

    vielen Dank für deine Antwort.

    Ich hatte deine Idee schon mal probiert. Aber damit teste ich ja, ob der Wert der Zelle irgendwo in der anderen Spalte vorkommt. Aber ich will eigentlich in meiner Zeile bleiben. Denn innerhalb der Spalte können Mehrfachnennungen vorkommen.

    Bin mir jetzt nicht ganz sicher, ob ich mich verständlich ausgedrückt habe????
    Aber hoffentlich kann mir jemand helfen. Bin ratlos :-(
     
  4. ukulele

    ukulele Datenbank-Guru

    Eigentlich ist es kein Problem wenn eine Unterabfrage mehrere Werte zurückgibt, sofern das Schlüsselwort davor IN ist. Bei = darf natürlich nur ein Wert zurück gegeben werden.

    Ich wollte aber eigentlich auf Schema als Bestandteil des Datenbanklink aus, eine andere Idee habe ich nicht. Klappt die Abfrage mit IN und mehreren Rückgabewerten denn innerhalb der selben DB?
     
  5. LLIILLAA

    LLIILLAA Neuer Benutzer

    Hallo Ukulele,

    hm. Danke erstmal für deine Antwort.

    Die Abfrage mit IN klappt. Aber das Problem ist folgendes:

    - Insgesamt habe ich 561 Datensätze.
    - Vergleiche ich diese mit dem Datenbanklink erhalte ich 8 Abweichungen.
    - Vergleich wie folgt:
    SELECT
    [Spalten]
    FROM
    [Tabelle] ent,
    [Tabelle]@[Datenbanklink] produktiv
    WHERE
    ent.[Spalte1] = produktiv.[Spalte1]
    AND(ent.[Spalte2] = 01020 OR ent.[Spalte2] = 01010)
    AND(produktiv.[Spalte2] = 01020 OR produktiv.[Spalte2] = 01010)
    AND ent.[Spalte3] = 2
    AND produktiv.[Spalte3] = 2
    AND (ent.koord_x_utm <> produktiv.koord_x_utm
    OR ent.koord_y_utm <> produktiv.koord_y_utm
    OR ent.koord_x_gk <> produktiv.koord_x_gk
    OR ent.koord_y_gk <> produktiv.koord_y_gk
    OR ent.koord_x_geo <> produktiv.koord_x_geo
    OR ent.koord_y_geo <> produktiv.koord_y_geo)

    Abweichungen sind folgende:
    x ent y ent x produktiv y produktiv
    484250 6059450 484200 6059399
    484250 6059450 484200 6059399
    484250 6059450 484200 6059399
    643550 6035250 529750 5961150
    529750 5961150 643550 6035250
    483450 6018650 0 0
    527050 6029850 0 0
    0 0 629550 6003850

    Diese 8 Abweichungen will ich eigentlich nicht updaten!
    Wenn ich dann aber später im Update-Befehl

    Where [Tabelle].[Spalte] In ( Select [Spalte] From [Schema].[Tabelle]@[Datenbanklink] )

    eingebe, werden einige Datensätze geupdatet, in denen eigentlich Differenzen sind.

    Da die Koordinaten in anderen Datensätzen vorkommen.
    Vielleicht doch irdgendeine Idee, wie ich dieses Problem umgehen könnte?
     
  6. ukulele

    ukulele Datenbank-Guru

    Ich denke das man das Problem nicht umgehen muss sondern das irgendwo ein Fehler vorliegt. Wenn ich eine Unterabfrage mache, diese mir mehrere Werte zurück liefert und ich einen meiner Werte in der eigentlichen Abfrage damit vergleiche, dann klappt das. Probleme machen hier höchstens mal NULL Werte etc.

    Wenn du in deinem WHERE Teil natürlich explizit die Datensätze abfragst, die du nicht aktuallisieren willst, dann must du NOT IN verwenden. Für mich ergibt leider der ganze Zusammenhang noch keinen Sinn...

    PS: Ich nutze MSSQL, ich glaube aber nicht das sich das in diesem Fall so gravierend unterscheidet.
     
  7. LLIILLAA

    LLIILLAA Neuer Benutzer

    Ich denke auch, dass der Unterschied zwischen Mysql und Oracle in diesem Fall nicht gravierend/vorhanden ist.

    Nochmal zu meinem Problem.
    In meinem Beispiel oben, in welchem ich die Abweichungen der 2 Datenbanken darstelle, ist Datensatz 4 und Datensatz 5 vertauscht.
    Deshalb will ich also eigentlich nicht, dass diese Datensätze geupdated werden.
    Aber da ich abfrage:

    Code:
    Where [Tabelle].[Spalte] In ( Select [Spalte] From [Schema].[Tabelle]@[Datenbanklink] )
    sehe ich mir alle Datensätze an. Ich will aber innerhalb des einen Datensatzes bleiben.
     
  8. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Wie wäre es mit der "EXISTS" - Klause?

    Statt:
    Where [Tabelle].[Spalte] In ( Select [Spalte] From [Schema].[Tabelle]@[Datenbanklink] )
    Dies:
    Where EXISTS ( Select 1 From [Schema].[Tabelle]@[Datenbanklink] b where b.[Spalte] = [Tabelle].[Spalte]
    )

    Lg
     
    Walter gefällt das.
Die Seite wird geladen...
Ähnliche Themen
  1. MiZ__
    Antworten:
    15
    Aufrufe:
    463
  2. BigBuisyB
    Antworten:
    1
    Aufrufe:
    182
  3. BigBuisyB
    Antworten:
    9
    Aufrufe:
    251

Diese Seite empfehlen