2017-05-12 1 views
0

Ich habe eine Schüler-Tabelle, möchte ich Daten einfügen, wenn die E-Mail-Adresse und Telefonnummer nicht in der Tabelle vorhanden ist. Ich habe versucht, diese Abfrage,MySQL-Abfrage zum Einfügen von Daten nur, wenn zwei Felder nicht existieren

INSERT INTO studesnts (name, phone, email, address) 
    VALUES ('vinod','9999999999','[email protected]','my address') 
    WHERE NOT EXISTS (SELECT * FROM studesnts WHERE phone ='9999999999' AND email='[email protected]') 

Aber diese Abfrage einen Fehler zurückgibt,

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOT EXISTS (SELECT * FROM studesnts (WHERE phone ='9999999999' ' at line 2 

Wie dies behebe?

Antwort

4

VALUES nimmt keine WHERE Klausel. Sie können SELECT statt:

INSERT INTO students (name, phone, email, address) 
    SELECT s.* 
    FROM (SELECT 'vinod' as name, '9999999999' as phone, '[email protected]' as email, 'my address' as address) s 
    WHERE NOT EXISTS (SELECT 1 
         FROM students s2 
         WHERE s2.phone = s.phone AND s2.email = s.email 
        ); 

aber Sie wahrscheinlich Studenten beabsichtigen, zu vermeiden, dass die gleiche Telefonnummer und E-Mail in der Tabelle haben. Wenn dies der Fall ist, erstellen Sie eine eindeutige Integritätsregel oder einen eindeutigen Index:

create unique index unq_students_phone_email on students(phone, email); 

Auf diese Weise garantiert die Datenbank die Integrität der Daten. Unter normalen Umständen führt dies zu einem Fehler. Wenn Sie nur die doppelte Einlage ignoriert werden möchten, können Sie tun:

INSERT INTO students (name, phone, email, address) 
    VALUES ('vinod', '9999999999', '[email protected]', 'my address') 
    ON DUPLICATE KEY UPDATE phone = VALUES(phone); 

Dies hat eine no-op im Fall von Duplikaten.

Verwandte Themen