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.

  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?
     
  3. Kyron9000

    Kyron9000 Neuer Benutzer

    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.
     

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