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
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
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