Veröffentlicht 25. Mai 200916 j Hallo zusammen, ich habe zwei Tabellen (eine .csv und eine .xls) Beide dieser Tabellen haben Vertragsnummern, welche auch in beiden Tabellen auftauchen. Jedoch gibt es in beiden Tabellen auch Nummern, die in der anderen nicht auftauchen. Nun möchte ich eine Übersicht aller Nummern die in jeweils nur einer Tabelle auftaucht. Beispiel: Tabelle 1: Spalte A Spalte B Vertragsnummer dsdd dsdd 1234 xcxc sccs 23434 Tabelle 1: Spalte A Spalte B Vertragsnummer dsdd dsdd 1234 xcxc sccs 23445 Nun soll die 23434 und die 23445 aus beiden Tabellen angezeigt werden, da ich beide nur einmal habe. Ich bekomme es über die Verknüpfungseigenschaften nur einseitig hin (also LEFT / RIGHT JOIN)... Kann mir bitte jemand schnell weiterhelfen? Vielen Dank im Voraus
25. Mai 200916 j Hallo, in Oracle würde ich mit zwei select Statements mit der Vertragsnummer basteln und die beiden Mengen mittels dem Befehl "MINUS" voneinander abziehen. Als Ergebnis erhält man die Nummern die in der anderen Menge nicht enthalten sind. Frank
25. Mai 200916 j Ich würde in einem ersten Schritt erstmal gerne dazu kommen, dass alle Datensätze in beide Richtungen angezeigt werden. Aber in der Verknüpfungseigenschaft kann man es immer nur in einer Richtung einstellen...
25. Mai 200916 j was meinst du mit "in einem ersten Schritt"? Wenn du genau ein Select-Statement meinst, dann geht das meiner meinung nach nicht. robotta hats vorgemacht. in oracle heißt es "minus", im SQL Server heißts "except". wie der befehl in Access heißt, muss man nachschauen. SELECT * FROM TableA EXCEPT SELECT * FROM TableB resultat: Die Werte, die jeweils nicht in der anderen Tabelle sind. grüße EDIT: dabei ist es egal, in welcher reihenfolge man die tabellen nennt. Bearbeitet 25. Mai 200916 j von delen
25. Mai 200916 j Mh, naja ich habs jetz erstmal anders gemacht und nur einen Left Join benutzt. habe nun diese Abfrage1 erstellt. Das Ergebnis sieht so aus: Tabelle1.Kobi1 Tabelle2.Kobi2 1234 1234 24334 43425 43425 44344 Also gibt es nicht zu allen Nummern aus der ersten Tabelle identische Nummern in der zweiten. Nun möchte ich mit einer Abfrage die Zeilen in der Tabelle 1 löschen, die in der Tabelle 2 nicht vorkommen. In diesem Beispiel also 24334 und 44344. Wie sieht nun aber der DELETE-Befehl aus, da ich ja einmal die Abfrage verwenden muss, aber die Zeilen aus der Ursprungstabelle löschen will... Dachte irgendwie so: DELETE FROM Tabelle1 INNER JOIN Abfrage1 ON Tabelle1.Kobi1=Abfrage1.Kobi1 WHERE Abfrage1.Kobi2 IS NULL; Gruß Bearbeitet 25. Mai 200916 j von manuel1987
25. Mai 200916 j ich würds mit einer unterabfrage versuchen: DELETE FROM Tabelle1 where vertragsnummer in (select tabelle1.auftragsnummer from tabelle1 left join tabelle2 on tabelle1.vertragsnummer = tabelle2.vertragsnummer where tabelle2.vertragsnummer is null); --> also einfach nur deinen join in den where-clause. wobei ich echt nicht versteh warum du es nicht mit nem Expect bzw. Minus etc. machst. grüße
25. Mai 200916 j Hallo, danke für die bisherige Hilfe. Leider sagt mir Access beim Ausführen des DELETE, dass das Löschen aus der angegebenen Tabelle nicht möglich ist. An was kann das liegen? Die Tabelle ist werder schreibgeschützt noch sonst was. Kann das an vorhandenen Beziehungen liegen?
25. Mai 200916 j ich arbeite leider nicht mit access, aber spontan würd ich sagen: ja, es liegt an vorhandenen beziehungen, die auf die zu löschenden Datensätze verweisen. greifen denn andere Tabellen mit Fremdschlüsseln auf die Datensätze dieser Tabelle zu? wenn ja, dann gibt es (zumindest im SQL Server, aber bestimmt auch in Access) die Möglichkeit, die Löschweitergabe eines Datensatzes einer Tabelle zu bestimmen. Beispielsweise kannst du bei der Definition einer Tabelle im SQL-Server bestimmen, dass alle anderen Datensätze aus anderen Tabellen, die auf die zu löschenden Datensätze verweisen ebenfalls gelöscht werden (oder alternativ diese jeweilige Fremdschlüsselspalte auf "NULL" gesetzt wird). Im SQL Server heißt der Zusatz: "On Delete Cascade" Falls du willst, dass die verweisenden DS mitgelöscht werden, dann such am besten in der Access-Hilfe nach "Cascade". Da wird sich bestimmt etwas finden. grüße PS: solltest du nicht so viel wert auf die referenzielle Integrität legen, dann reicht auch ein Löschen der Beziehung zwischen zwei referenzierten Tabellen. (Würde ich aber nicht empfehlen ^^... gibt nur Chaos)
25. Mai 200916 j nich so kompliziert denken wenn du das so loeschen willst kannst du einfach DELETE FROM tabelle1 WHERE tabelle1.vertragsnummer IN (SELECT tabelle2.vertragsnummer FROM tabelle2) machen. ist allerdings mysql syntax.
26. Mai 200916 j Hey, das Problem ist, dass es sich um eine verknüpfte Excel-Tabelle handelt, in der Datensätze gelöscht werden sollen. Dies funktioniert aber nicht, nur bei einem Import der Tabelle. Ich kann die Tabelle aber nicht importieren, da die Formeln und Formatierungen sonst verschwinden... Weiß jemand weiter? Gruß
28. Mai 200916 j Probier mal mit folgendem Ansatz weiter zu machen: - Zufügen eine Spalte in Excel, die die Zeilennummer enthält - Programmieren eines Makros in Excel, das Zeile Nummer Zeilennummer löscht - In Access ein Modul schreiben, das: 1. die Tabellen ausliest(inkl. Zeilennummer) (in Recordset) 2. vergleicht wie bereits oben beschrieben 3. das Excel-Makro (oder auch VB-Modul) mit Übergabe der zu löschenden Zeilennummer ausführt 4. Das ganze so lange macht, bis keine zu löschenden Zeilen mehr vorhanden sind Alternativ gibts eventuell einen Weg, ein Array aller Zeilennummern zu übergeben, das würde eine Schleife sparen. Zu Details müsstes Du google bemühen^^
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.