2017-05-12 21 views
0

私はstudentsテーブルを持っていますが、電子メールと電話番号がテーブルに存在しない場合はデータを挿入したいと思います。私はこの問題を解決するにはどうすればよい、2つのフィールドが存在しない場合にのみデータを挿入するMySQLクエリ

#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 

を、このクエリを試してみました

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]') 

しかし、このクエリはエラーを返しますか?

答えて

4

VALUESは、WHERE節を使用しません。あなたは代わりにSELECTを使用することができます。

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 
        ); 

しかし、あなたはおそらく、テーブルに同じ電話やメールを持っている学生を避けたいと考えています。その場合は、一意の制約またはインデックスを作成します。

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

このように、データベースはデータの整合性を保証します。通常の状況では、エラーが発生します。あなただけの重複挿入を無視することにしたい場合は、行うことができます:

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

これは、重複した場合に空命令もしません。

関連する問題