1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Tabellenübergreifender Verglech mit mehreren Anfragen

Dieses Thema im Forum "Microsoft Access" wurde erstellt von mrtien, 16 Januar 2020 um 10:21 Uhr.

  1. mrtien

    mrtien Neuer Benutzer

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

    akretschmer Datenbank-Guru

    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?
     

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden