manuel1987 Geschrieben 25. Mai 2009 Geschrieben 25. Mai 2009 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 Zitieren
robotto7831a Geschrieben 25. Mai 2009 Geschrieben 25. Mai 2009 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 Zitieren
manuel1987 Geschrieben 25. Mai 2009 Autor Geschrieben 25. Mai 2009 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... Zitieren
delen Geschrieben 25. Mai 2009 Geschrieben 25. Mai 2009 (bearbeitet) 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 2009 von delen Zitieren
manuel1987 Geschrieben 25. Mai 2009 Autor Geschrieben 25. Mai 2009 (bearbeitet) 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 2009 von manuel1987 Zitieren
delen Geschrieben 25. Mai 2009 Geschrieben 25. Mai 2009 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 Zitieren
manuel1987 Geschrieben 25. Mai 2009 Autor Geschrieben 25. Mai 2009 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? Zitieren
delen Geschrieben 25. Mai 2009 Geschrieben 25. Mai 2009 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) Zitieren
T3D Geschrieben 25. Mai 2009 Geschrieben 25. Mai 2009 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. Zitieren
manuel1987 Geschrieben 26. Mai 2009 Autor Geschrieben 26. Mai 2009 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ß Zitieren
Jeglalf Geschrieben 28. Mai 2009 Geschrieben 28. Mai 2009 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^^ Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.