Tabellenübergreifender Verglech mit mehreren Anfragen

mrtien

Neuer Benutzer
Beiträge
1
Liebes Forum,

Dies ist meine erste Frage hier und deswegen seid bitte etwas nachsichtig.

Mein Problem ist, dass ich zwei Tabellen mit mehreren tausend Datensätze habe und hierbei einmal die Spalte CN aus Tabelle1 mit der Spalte MAIL aus Tabelle2 vergleichen möchte und dabei alle gleichen rauswerfen will, damit ich in der Abfrage alle Datensätze ohne Duplikate in der anderen Spalte habe.

Im nächsten Schrittwürde ich am besten mit der gleichen Anfrage die noch übrig gebliebenen Datensätze nochmal filtern. Hierbei soll dann wieder die Spalte CN aus Tabelle1 mit SAM aus Tabelle2 verglichenwerden und die ohne Duplikate in SAM haben.

Meine bestehenden Versuche waren eher dürftig und ich hatte zwar teils auch die richtig gefilterten, aber irgendwann wiederholten die sich dann. So wurden aus 90 Datensätze in Tabelle 1 und 90 in Tabelle2 nach der Abfrage dann 8000 Datensätze.

Abfrage:
SELECT Tabelle1.*, Tabelle2.*
FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.CN <>Tabelle2.SAM;

UNION

SELECT Tabelle1.*, Tabelle2.*
FROM Tabelle1
INNER JOIN Tabelle2 ON Tabelle1.CN <>Tabelle2.MAIL;


Benutze Software:
Microsoft Access 2016


Vielen Dank
mrtien
 
Werbung:
Du machst 'aus Versehen' einen CROSS JOIN, daher explodiert auch Deine Datenmenge.

Code:
bdrdemo=# create table t1 (id bigserial primary key, t text);
CREATE TABLE
bdrdemo=# create table t2 (id bigserial primary key, t text);
CREATE TABLE
bdrdemo=# insert into t1 (t) select 'text'||s::text from generate_series(1,5)s;
INSERT 0 5
bdrdemo=# insert into t2 (t) select 'text'||s::text from generate_series(3,8)s;
INSERT 0 6
bdrdemo=# select * from t1;
         id          |   t   
---------------------+-------
 1737551068046327809 | text1
 1737551068046327810 | text2
 1737551068046327811 | text3
 1737551068046327812 | text4
 1737551068046327813 | text5
(5 rows)

bdrdemo=# select * from t2;
         id          |   t   
---------------------+-------
 1737551252679589889 | text3
 1737551252696367106 | text4
 1737551252696367107 | text5
 1737551252696367108 | text6
 1737551252696367109 | text7
 1737551252696367110 | text8
(6 rows)

bdrdemo=# select t from t1 except select t from t2 union all (select t from t2 except select t from t1);
   t   
-------
 text1
 text2
 text7
 text6
 text8
(5 rows)

Vermutlich suchst Du etwas wie dies, also EXCEPT, oder?
 
Werbung:
Hallo,

denke, das sucht er nicht.
Erstens würde mich interessieren, wieso überhaupt in Tabellen die gleichen Daten vorkommen können?
Man erstellt in einer DB nur ein mal Daten und nicht in jeder Tabelle wieder.
Die Daten werden mit einer ID verknüpft. Das ist ein DB-Model-Problem bei dir!
Aber, zu deiner Frage... ich würde dein vermeintliches Problem mit dieser SQL lösen...
Code:
SELECT Tabelle1.CM
FROM Tabelle1
WHERE (((Tabelle1.CM) In (Select Mail FROM Tabelle2)))
Diese ist eine aktualisierbare Abfrage und dadurch ist sie auch löschbar.
 
Zurück
Oben