Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

2 Tabellen vergleichen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von freshman, 30 April 2012.

  1. freshman

    freshman Datenbank-Guru

    Hallo,
    habe wohl mal wieder ein zu leichtes Problem. 2 Tabellen miteinander vergleichen und mir die Differenzen im Ergebnis anzeigen.

    Beispiel

    Tabelle1
    Spalte1 Spalte2
    user1 bez1
    user2 bez2
    user3 bez3

    Tabelle2
    Spalte1 Spalte2
    user1 bez1
    user2 bez2
    user4 bez4
    user5 bez5


    Ergebnis soll sein: zeige mir alle user an, die in Tabelle 2 vorhanden sind, aber nicht in Tabelle 1 vorhanden sind. Als Vergleichswert soll Spalte 2 dienen.

    Wenn ich Abfrage, dann vergleicht er immer jeden Namen mit Spalte 2, will es aber eindeutig haben, auch ein DISTINCT half mir nicht weiter
    hier mein bisheriges Ergebniss
    _______________________________________________________________
    SELECT Tabelle1.Spalte1 AS Name,
    Tabelle2.Spallte2 AS Bezeichnung
    FROM Datenbanknamer.dbo.Tabelle1 INNER JOIN Datenbanknamer.dbo.Tabelle2
    ON Tabelle1.Spalte2 <> Tabelle2.Spalte2____________________________________

    klar, weiss, das der Code falsch ist, aber sonst würde ich mein Problem ja nicht posten :)

    DANKE, freshman
     
  2. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Hy,

    hier die Lösung:

    Code:
     
    select *
       from Tabelle2
     
    where NOT EXISTS ( select 1 from Tabelle1 where Tabelle1.Spalte2 = Tabelle2.Spalte2 )
     
    
    Lg
     
  3. freshman

    freshman Datenbank-Guru

    Hi,
    danke, bekomme dann aber die Meldung:

    "Meldung 4104, Ebene 16, Status 1, Zeile 6
    Der mehrteilige Bezeichner 'Tabelle2.Spalte2' konnte nicht gebunden werden."

    Danke
    :)
     
  4. ukulele

    ukulele Datenbank-Guru

    Müsste aber eigentlich gehen wenn du die Tabellennamen im Subselect mit angibst. Probier mal mit Alias (t1 und t2) hinter den Tabellennamen und für die Spalten:
    Code:
    SELECT    *
    FROM    tabelle2 t2
    WHERE    NOT EXISTS (    SELECT    1
                            FROM    tabelle1 t1
                            WHERE    t1.pk = t2.pk )
    Welche MS SQL Version hast du?
     
    PLSQL_SQL gefällt das.
  5. freshman

    freshman Datenbank-Guru

    Danke, SQL Server 2008 R2

    hier meine Abfrage
    select
    * fromuser423
    where

    NOTEXISTS

    (selectuser423.CEE_Accfromuser423whereuser423.CEE_Acc=SysUser326.CEE_Acc)


    versteh ich nicht
     
  6. ukulele

    ukulele Datenbank-Guru

    Du hast ja auch zweimal die selbe Tabelle drin.
    Code:
    SELECT    *
    FROM    user423
    WHERE    NOT EXISTS (    SELECT    1
                            FROM    SysUser326
                            WHERE    user423.CEE_Acc = SysUser326.CEE_Acc )
     
    PLSQL_SQL gefällt das.
  7. freshman

    freshman Datenbank-Guru

    ah okay,
    habe das verstanden, reiner Logifehler, nun läuft es auch
    War das nun extrem dumm? *lach
    Wahrscheinlich ja, hab ich aber ECHT nicht gesehen..

    DANKE
     
  8. freshman

    freshman Datenbank-Guru

    aber eine Frage hab ich dann doch noch, damit ich die Logih verstehe:
    Warum steht um Subselect eine "1" hinter dem Select Befehl????? gilt das als Zähler?
    DANKE
     
  9. ukulele

    ukulele Datenbank-Guru

    Du prüfst ja nur auf EXISTS bzw. NOT EXISTS, das was der SELECT liefert ist also irrelevant, nur ob er was liefert. Natürlich kann man auch mit SELECT * FROM... arbeiten, oder SELECT 'a' FROM... es muss nur etwas zurück gegeben werden. Ob SELECT 1 schneller als SELECT * ist, kann ich dir nicht sagen.
     
    PLSQL_SQL gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden