sql >> データベース >  >> RDS >> Mysql

存在しない場合は機能しません

    MySQLはifを許可していません プログラミングブロック(ストアドプロシージャ、トリガー、または関数)にいる場合を除き、ロジック。

    幸い、WHEREでも同じことができます ロジック:

    INSERT INTO user 
        SELECT 'Rutvij', 'python', 25
        FROM DUAL
        WHERE NOT EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python')
        UNION ALL
        SELECT 'Kanzaria', 'python', 25
        FROM DUAL
        WHERE EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python');
    

    MySQLはSELECTを処理する必要があります INSERTの前 、したがって、1行だけを挿入する必要があります。

    または、2つのINSERTとしてこれを行うことができます sただし、逆の順序:

    INSERT INTO user 
        SELECT 'Kanzaria', 'python', 25
        FROM DUAL
        WHERE EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python');
    
    INSERT INTO user 
        SELECT 'Rutvij', 'python', 25
        FROM DUAL
        WHERE NOT EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python');
    


    1. テーブルに影響を与えたSQLをログに記録するトリガーを作成しますか?

    2. 2つの列のいずれかで競合が発生した場合にPostgresでアップサートするにはどうすればよいですか?

    3. WithoutRowIDで主キーを使用する

    4. ORDERBYの後にGROUPBY