# SQL-Query< Schnittmenge 2-er Tabellen



## ctac (10. Mai 2004)

Hallo Leute

ich hab ein Problem. ich will aus 2 tabellen eine schnittmenge erstellen
1 tabelle id, x, y
2 tabelle id, x, y

es sollen alle datensätze aus tabelle1 gelöscht werden bei dennen es keinen x und y in der 2 tabelle gibt. 

die Abfrage soll unter Access2000 funktionieren.

vielen dank im vorraus.


----------



## Slizzzer (11. Mai 2004)

Hi!

Klick dir die Abfrage doch einfach zusammen! 

Unter Access heisst die Abfrage "Löschabfrage".
So könnte das Ergebnis dann aussehen:

DELETE tabEins.id, tabEins.x, tabEins.y
FROM tabEins
WHERE (((tabEins.x)=[tabZwei]![x]) AND ((tabEins.y)=[tabZwei]![y]));


----------



## ctac (11. Mai 2004)

> _Original geschrieben von Slizzzer _
> *Hi!
> 
> Klick dir die Abfrage doch einfach zusammen!
> ...


das problem ist irgendwo an anderer stelle, 
denn soweit ich diese SQL-Anweisung ausführe kommt eine messagebox mit einem feld, die mich nach dem Wert von tabZwei.y und TabZwei.x fragt ..

und bei diesem Feld darf ich nur eine Zahl eingeben, sonst kommt eine Fehlermeldung. 

Wenn ich die eine Verschachtelte Anfrage formuliere, mussen denn die Tabellen in einer Beziehung stehen ?

Grüsse.


----------



## Slizzzer (11. Mai 2004)

Wenn Werte über ein Dialogfeld abgefragt werden, dann bedeutet das, dass die Abfrage die Werte sonst nirgends findet. Das wiederum deutet darauf hin, dass Du meine Abfrage nicht mit deinen Tabellen- bzw. Feldnamen angepasst hast.
tabEins und tabZwei sind die Namen der Tabellen, die ich als Beispiel benutzt habe. 

Eine Beziehung brauchen die Tabellen nicht zu haben. Du benutzt praktisch die eine Tabelle als nur Kriterium um in der anderen was zu löschen.


----------



## ctac (12. Mai 2004)

> _Original geschrieben von Slizzzer _
> *Wenn Werte über ein Dialogfeld abgefragt werden, dann bedeutet das, dass die Abfrage die Werte sonst nirgends findet. Das wiederum deutet darauf hin, dass Du meine Abfrage nicht mit deinen Tabellen- bzw. Feldnamen angepasst hast.
> tabEins und tabZwei sind die Namen der Tabellen, die ich als Beispiel benutzt habe.
> 
> Eine Beziehung brauchen die Tabellen nicht zu haben. Du benutzt praktisch die eine Tabelle als nur Kriterium um in der anderen was zu löschen. *



vielen dank, hab aber einen tip bekommen .. 

DELETE *
FROM test
WHERE NOT EXISTS(SELECT * FROM setup WHERE X=test.X AND Y=test.Y);


----------



## ctac (13. Mai 2004)

kann ich meine letzte query noch so editieren, dass duplikate automatisch mitgelöscht werden (nach X und Y).. 

mfg.


----------



## TeaTime (13. Mai 2004)

hat denn deine Tabelle einen eindeutigen schlüssel?

wenn ja dann

delete from test
where id in (Select max(id) from test having count(x) > 1 group by x)


----------



## ctac (13. Mai 2004)

und wenn nicht


----------



## TeaTime (13. Mai 2004)

> _Original geschrieben von ctac _
> *und wenn nicht *


es muss einen eindeutigen unterschied geben "irgendwo" sonst kann die db / access nicht unterscheiden, welcher der beiden datensätze es löschen soll


----------

