2 Tabellen vergleichen

freshman

Datenbank-Guru
Beiträge
100
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
 
Werbung:

PLSQL_SQL

Datenbank-Guru
Beiträge
176
Hy,

hier die Lösung:

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

Lg
 

freshman

Datenbank-Guru
Beiträge
100
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
:)
 

ukulele

Datenbank-Guru
Beiträge
4.394
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?
 

freshman

Datenbank-Guru
Beiträge
100
Danke, SQL Server 2008 R2

hier meine Abfrage
select
* fromuser423
where

NOTEXISTS

(selectuser423.CEE_Accfromuser423whereuser423.CEE_Acc=SysUser326.CEE_Acc)


versteh ich nicht
 

ukulele

Datenbank-Guru
Beiträge
4.394
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 )
 

freshman

Datenbank-Guru
Beiträge
100
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
 

freshman

Datenbank-Guru
Beiträge
100
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
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.394
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.
 
Oben