Insert Where Not Exists-Ohne Primärschlüssel

7

Ich habe 3 Tabellen: Zahnärzte, Gruppen und Gruppenzwischenglieder. Viele Zahnärzte verbinden sich über die groupdentlink-Tabelle mit vielen Gruppen.

Ich versuche also eine Abfrage zu machen, wo Zeilen in groupdentlink eingefügt werden (alle Zahnärzte in dem Zustand mit allen Gruppen in dem Staat verbunden werden), aber nur, wenn diese Zeilen nicht bereits existieren. Kurz gesagt, ich möchte neue Zeilen hinzufügen, ohne bestehende zu überschreiben oder zu duplizieren.

Die Absicht der Abfrage lautet also etwa:

%Vor%

Und ich habe keine Primärschlüssel in der Tabelle grounddentlink.

Vielen Dank im Voraus!

    
Brian Barrus 15.12.2011, 19:11
quelle

4 Antworten

18

Wenn Sie wirklich Ihre eigene (Arbeits) -Abfrage schreiben möchten ..

%Vor%

... aber MySQL kann das alles für dich erledigen!

Sie brauchen keine Primärschlüssel, damit MySQL dies für Sie übernimmt, Sie sollten eine UNIQUE Schlüsseleinschränkung für den kombinierten Satz der beiden Spalten hinzufügen.

Abfrage, um den eindeutigen Schlüssel dent_group_uniq_key zu groupdentlink hinzuzufügen.

%Vor%

Verwenden Sie dann INSERT IGNORE für Ihre Abfrage:

%Vor%

INSERT IGNORE wird versuchen, eine Zeile in Ihre Tabelle einzufügen, wenn es aufgrund einer Schlüsseleinschränkung fehlschlägt, verhält es sich wie nichts passiert.

    
Filip Roséen - refp 16.12.2011, 13:15
quelle
4
%Vor%

Und ich denke, Sie können nur einen zusammengesetzten Primärschlüssel für die Kombination (f_dent_id, f_group_id) erstellen.

    
greyfairer 15.12.2011 19:17
quelle
2

Sie haben es fast geschafft! Sie können eine SELECT-Anweisung verwenden, um eine INSERT-Anweisung zu füttern. Tun Sie das einfach:

%Vor%     
Eric 15.12.2011 19:17
quelle
1
%Vor%

Und ich denke, Sie können einen zusammengesetzten Primärschlüssel für die Kombination (f_dent_id, f_group_id) erstellen.

    
Mahesh Badiger 16.12.2011 13:13
quelle

Tags und Links