utamaro’s blog

誰かの役に立つ情報を発信するブログ

データが存在しない場合にデータを追加するSQL

テーブル内にデータが存在しない場合に限って、データを追加する方法を紹介します。

クエリについては日本語で解説をするよにも、まずはコードを見たほうが早いと思うので、先に載せます。

こちらが、データを追加するクエリです。

INSERT INTO tag (
    name,
    created_at,
    modified_at
)
SELECT
    'test',
    now(),
    now()
WHERE
    NOT EXISTS (
        SELECT
            1
        FROM
            tag
        WHERE
            name = 'test'
    )

上記のクエリは、tagを追加する際に、すでにタグが存在していたら追加しないというクエリです。

これは、select insert文というものです。そして、not existを使って、存在しない場合を条件で追加しています。

where 1で真になるので、データがある場合でinsertが実行されます。

おまけ

一般的なinsert文はこのようなクエリだと思います。

insert into tag (
    xxxx,
    yyyy,
    zzzz
) values (
    1,
    2,
    3
)

じゃあ、このクエリにwhereをつければよいのでは?と考えるかもしれませんが、それは構文エラーになります。

一応クエリを載せておきます。

INSERT INTO tag (
    name,
    created_at,
    modified_at
) values (
    'test',
    now(),
    now()
)
WHERE
    NOT EXISTS (
        SELECT
            1
        FROM
            tag
        WHERE
            name = 'test'
    )