[Access] Zusammengesetzten PrimaryKey suchen mit SQL

JohnnyK

Grünschnabel
Hallo Leute,

ich habe eine Tabelle ( Artikel ) in meiner Access-DB, die einen aus vier Attributen (Text) zusammengesetzten Primärschlüssel hat.
ArtNr_1 Text( 2 ),
ArtNr_2 Text( 5 ),
ArtVers Text( 1 ),
ArtIndex Text( 2 ),

Dieser Primärschlüssel ist in einer weiteren Tabelle als Foreign Key enthalten.

Nun wollte ich gerne wissen wie ich mittels einer SQL-Abfrage herausfinden kann, welche meiner Werte (Primärschlüssel-Werte) NICHT in der anderen Tabelle enthalten sind ?

Welche dort enthalten sind kann ich herausfinden. Brauche eben die, die nicht in der anderen Tabelle aufgeführt sind.....

Wäre echt froh, wenn mir jemand eine Lösung anbieten könnte

Schönen Gruß und Dank
JohnnyK
 
Hallo waterhouse :)

danke erstmal für Deine Antwort....

Ich habe mir die Joins angeschaut, habe jedoch nirgends ein ähnliches Beispiel gefunden.... Überall wird, wenn nach etwas gesuch wird, mit einem Key gearbeitet...

Naja, trotzdem vielen Dank

Gruß

Johnny
 
hi johnnyk,

ich kann dir hier nicht die syntax schreiben, weil ich kein access auf dem rechner habe.
das ist aber auch nicht notwendig, da es um das prinzip der joins geht. schau dir mal die hilfe in deinem access an, da wirst du wahrscheinlich eine ausfuehrliche erklaerung zu den joins finden. in kurzform: man kann 2 tabellen mittels join (inner join, left outer join, right outer join) verbinden.
select * from t1 join t2 on t1.pk = t2.fk;
das ist gleichzusetzen mit:
select * from t1,t2 where t1.pk=t2.fk;
alle felder aus beiden tabellen bei denen primary key = foreign key werden angezeigt.
genau das willst du nicht, da die in t2 nicht vorhandenen primary keys nicht angezeigt werden. dafuer gibt es die outer joins .(keine ahnung ob access left joinn oder left outer join haben will, steht in der hilfe)
select * from t1 left outer join t2 on t1.pk = t2.fk;
hier werden auch alle spalten t1und t2 angezeigt, aber in den spalten aus t2 steht in einigen faellen null. das passiert genau dann, wenn es keine entsprechender foreign key eingetragen ist.
dieses konstrukt loest genau dein problem.
right outer join ist aequivalent zu left outer join, hierbei wird allerdings die rechte tabelle als bezugspunkt gewaehlt.
klar soweit?
 
Hallo waterhouse :)

ich habe mich heute nochmal richtig hingesetzt und habe das Problem dann doch noch gelöst...

Mit zwei in einander geschachtelten SELECT-Statements erhält man das Ergebnis.
Ich werde den Status auf erledigt setzen und meine Lösung für diejenigen, die an das gleiche Problem stoßen, kurz erläutern...

Ich habe zwei Tabellen ( Tabelle_1 und Tabelle_2 ).
---Der Primärschlüssel der ersten Tabelle (Tabelle_1) ist zugleich der Fremdschlüssel (FK)
in der zweiten Tabelle (Tabelle_2).
---Der Primärschlüssel ist zusammengesetzt aus 4 Attributen ( ArtNr1, ArtNr2, Version,
Index )
---Die Zweite Tabelle (Tabelle_2) hat zusätzlich zum FK noch ein weiteres EINDEUTIGES
Attribut (z.B. BauteilNr)
----------------------

Wenn ich nun Einträge (Primärschlüssel ) in der ersten Tabelle suche, die nicht in der zweiten Tabelle enthalten sind, so verwende ich folgenden SQL-Ausdruck :

SELECT DISTINCT a.ArtNr1, a.ArtNr2, a.Version, a.Index
FROM (
SELECT * FROM Tabelle_1 As a LEFT OUTER JOIN Tabelle_2 As b
WHERE a.ArtNr1=b.ArtNr1 AND a.ArtNr2=b.ArtNr2 AND
a.Version=b.Version AND a.Index=b.Index ) As k
WHERE k.BauteilNr IS Null;

===============================

Bei mir hat es wunderbar funktioniert... :)

Herzlichen Dank für den Tipp

Gruß
JohnnyK
 
Zurück