online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon morpheus__85 vom 17.10.2019, 13:26 Options

Lösung

Per SQL auf Primärschlüssel zugreifen

Hallo miteinander,

habe da ein kleines Problem.

Ich habe 2 Tabellen bei denen jeweil ein kombinierter Primärschlüssel enthalten ist. Es handelt sich jeweils um die Felder Keyword und Datum.

Nun möchte ich die 2 Tabellen miteinander Vergleichen, und die Datensätze ausgeben, welche in Tabelle1 aber nicht in Tabelle 2 vorhanden sind.

Normal würd ich die WHERE Bedingung so formulieren:

WHERE(( tblTabelle1.Datum) Not In (select Datum from tblTabelle2));

Dann würd ich ja aber nur nach dem Datum suchen, da allerdings mein Primärschlüssel aus Datum & Keyword besteht müsste ich ja 2 Werte abprüfen.

Hoffe ihr könnt mir helfen.

Gruß
Tobias


Antwort schreiben

Antwort 1 von Marie vom 17.10.2019, 15:22 OptionsLösung

Lösung
Machst zuerst mal in Tabelle 1 eine neue Spalte namens ID mit Autowert, damit jedem Datensatz eindeutig eine Zahl zugeordnet ist.

Dann machste eine Abfrage wo all die Datensatznummern drin sind, die in beiden Tabellen gleichzeitig sind

SELECT Tabelle1.ID
FROM Tabelle1 INNER JOIN Tabelle2 ON (Tabelle1.datum = Tabelle2.datum) AND (Tabelle1.keyword = Tabelle2.keyword);

so, diese Tablle enthält jetzt alle die vorhanden sind, nun brauchste nur noch die zu finden, die in Tabelle 1 sind und nicht in dieser Abfrage. Diese Abfrage nenne ich jetzt mal QryTabelle12.

Dann machste eine Abfrage über Tabelle 1 und diese obige Abfrage, die Dir die Datensatznummern ermittelt von den Datensätzen, die in 1, aber nicht in 2 sind:
SELECT DISTINCTROW [Tabelle1].[ID]
FROM Tabelle1 LEFT JOIN QryTabelle12 ON [Tabelle1].[ID] = [QryTabelle12].[ID]
WHERE ([QryTabelle12].[ID] Is Null);

Gruß Marie

Antwort 2 von erik vom 17.10.2019, 16:16 Options

Hallo,

du kannst auch bei kombinierten Primärschlüseln eine OUTER JOIN-Abfrage erstellen:

    Erstelle eine neue Abfrage

    Füge Tabelle1 und Tabelle2 ein

    Ziehe zwei Beziehungen von Tabelle1 zu Tabelle2, jeweils von Keyword zu Keyword und von Datum zu Datum, sofern diese Beziehungen nicht eh schon vorhanden sind

    Führe auf jeder Beziehung einen Doppelklick aus und stelle jeweils den Verknüpfungstyp auf Nr. 2 (= LEFT JOIN)

    Füge von Tabelle2 die Felder Keyword und Datum in die Feldliste der Abfrage ein.

    In die Bedingung von beiden Feldern schreibst du in die gleiche Zeile
    Ist Null


    Abfrage ausführen


Am Ende müsste sinngemäß folgendes rauskommen:

SELECT Tabelle1.*
FROM Tabelle1 [b]LEFT JOIN [/b]Tabelle2
            ON (Tabelle1.Keyword = Tabelle2.Keyword)
            AND (Tabelle1.Datum = Tabelle2.Datum)
WHERE Tabelle2.Keyword IS NULL AND Tabelle2.Datum IS NULL


Gruss
erik

Antwort 3 von Marie vom 17.10.2019, 16:44 Options

jo erik, is natürlich eleganter, irgendwie hatte ich mal wieder mattscheibe.

Aber es würde ihm nicht wirklich was schaden, wenn er mal ne Autonummer als Datensatzid vergeben würde, das erleichtert wohl auch für künftige andere Suchen vieles.

gruß marie

Antwort 4 von morpheus__85 vom 18.10.2019, 07:45 Options

guten morgen Ihr 2...

also eure 2 Lösungen sind beide Spitze.
Vielen Dank für Eure Hilfe habt mir sehr geholfen.
Hab mich dann letztendlich für eriks Lösung entschlossen, ist etwas einfacher ;-)

Gruß
morpheus

Ähnliche Themen

sql hilfe
isset  17.01.2007 - 64 Hits - 16 Antworten

Windows CE und SQL Server
ducky12  10.10.2007 - 106 Hits - 1 Antwort

Daten von SQL DB in Excel auswerten
MIC_KA  03.01.2008 - 186 Hits - 2 Antworten

SQL Abfrage über mehrere Tabellen
Aamchi  13.01.2008 - 45 Hits -

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026