Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

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

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

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?

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)

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.

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ß

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.