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

SQL Befehl (Duplikate kennzeichnen)

Dieses Thema im Forum "Microsoft Access" wurde erstellt von Cornerstone, 3 Juli 2019.

  1. Cornerstone

    Cornerstone Neuer Benutzer

    Hey Leute,

    ich habe das Problem das ich ein Formular speichern möchte in dem Kundennummer , ansprechpartner-id und eine Schulungsbezeichnung vorhanden sind. Ansich kein Problem. Nun soll access aber beim erneuten Speichern , anhand der Kundennummer und der Ansprechpartner id merken, das dieser Datensatz schon einmal vorhanden ist und dadurch die Schulungs-id (die nur in der Tabelle aber nicht im Formular enthalten ist) in 2 ändern. ( Speichere ich den selben Datensatz nochmal somit in 3) also im Prinzip ein counter für Duplikate mit der selben Kundennummer und Ansprechpartner - id...

    Ich hoffe ich habe das so halbwegs verständlich erklärt :/ ist sowas möglich ?

    Vielen Dank euch schon Mal :)
     
  2. ukulele

    ukulele Datenbank-Guru

    Du hast im Prinzip einen dreiteiligen Primärschlüssel denn Kundennummer und Ansprechpartner zusammen sind noch nicht eindeutig und dürfen doppelt vergeben werden. Ich habe keine Ahnung ob und wie man eine Art Autoincrement über drei Spalten in Access abbilden kann aber ich würde empfehlen die Spalte Schulungs-id durch einen eindeutigen, künstlichen Primärschlüssel zu ersetzen den du dann einfach seperat hoch zählst oder mit einer UID anlegst.
     
  3. Cornerstone

    Cornerstone Neuer Benutzer

    Vielen Dank für deine schnelle Antwort,

    ich hab das Mal probiert aber das Problem ist selbst wenn ich eine neue Spalte anlege die hoch zählt... Wie bringe ich dieser bei das sobald sich die Ansprechpartner Id oder Kundenummer ändert sie wieder von 1 anfängt
     
  4. ukulele

    ukulele Datenbank-Guru

    Sie dürfte ja eben nicht bei 1 wieder anfangen sondern würde einen über die ganze Tabelle eindeutigen Primärschlüssel haben. Somit würde Access ohne Probleme den Datensatz aktualisieren oder eben einen neuen Datensatz erzeugen, was ich jetzt als dein Problem aufgefast habe.

    Istzustand wäre doch:
    Kundennummer, AnsprechpartnerID und SchulungsID bilden zusammen deinen Primärschlüssel wobei SchulungsID künstlich ist und vom Anwender nicht eingesehen werden kann. Die ersten beiden IDs sind allein nicht eindeutig, können also doppelt vorkommen.

    Dann kannst du auch einen auf die ganze Tabelle eindeutigen PK schaffen und SchulungsID wegwerfen. Eine Reihenfolge für Primärschlüssel ist irrelevant.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    ich glaube, der Fragesteller sucht sowas:

    Code:
    test=# create table cornerstone (kundennummer int, ansprechpartner int, bezeichnung text, schulung int default 1, primary key(kundennummer, ansprechpartner));
    CREATE TABLE
    test=*# select * from cornerstone ;
     kundennummer | ansprechpartner | bezeichnung | schulung
    --------------+-----------------+-------------+----------
    (0 rows)
    
    test=*# insert into cornerstone (kundennummer, ansprechpartner, bezeichnung) values (1,2,'test1') on conflict (kundennummer,ansprechpartner) do update set bezeichnung=excluded.bezeichnung, schulung=cornerstone.schulung+1;
    INSERT 0 1
    test=*# select * from cornerstone ;
     kundennummer | ansprechpartner | bezeichnung | schulung
    --------------+-----------------+-------------+----------
                1 |               2 | test1       |        1
    (1 row)
    
    test=*# insert into cornerstone (kundennummer, ansprechpartner, bezeichnung) values (1,2,'test1,1') on conflict (kundennummer,ansprechpartner) do update set bezeichnung=excluded.bezeichnung, schulung=cornerstone.schulung+1;
    INSERT 0 1
    test=*# select * from cornerstone ;
     kundennummer | ansprechpartner | bezeichnung | schulung
    --------------+-----------------+-------------+----------
                1 |               2 | test1,1     |        2
    (1 row)
    
    test=*# insert into cornerstone (kundennummer, ansprechpartner, bezeichnung) values (2,3,'test2') on conflict (kundennummer,ansprechpartner) do update set bezeichnung=excluded.bezeichnung, schulung=cornerstone.schulung+1;
    INSERT 0 1
    test=*# select * from cornerstone ;
     kundennummer | ansprechpartner | bezeichnung | schulung
    --------------+-----------------+-------------+----------
                1 |               2 | test1,1     |        2
                2 |               3 | test2       |        1
    (2 rows)
    
    test=*#
    
    Das ist jetzt aber PostgreSQL.
     
  6. ukulele

    ukulele Datenbank-Guru

    Das wird es wohl so in Access nicht geben, jedenfalls nicht ohne mit VB da rum zu wurschteln.

    Außerdem würde ich sagen das der PK (kundennummer,ansprechpartner,schulung) sein muss. So wie du es zeigst würden ja unterschiedliche Schulungseinheiten der selben Kundennummer (Organisation) und des selben Ansprechpartners (Person? Teilnehmer?) in einem Datensatz zusammen laufen und "Schulung" wäre nur ein Zähler. Aber vielleicht irre ich auch was die Struktur angeht.
     
Die Seite wird geladen...

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