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

存在しない場合は挿入し、存在しない場合はpostgresqlにIDを返します

    はい、returningがあります

    INSERT INTO tag ("key", "value")
    SELECT 'key1', 'value1'
    WHERE NOT EXISTS (
        SELECT id, "key", "value"
        FROM node_tag
        WHERE key = 'key1' AND value = 'value1'
        )
    returning id, "key", "value"
    

    行がすでに存在する場合にその行を返すには

    with s as (
        select id, "key", "value"
        from tag
        where key = 'key1' and value = 'value1'
    ), i as (
        insert into tag ("key", "value")
        select 'key1', 'value1'
        where not exists (select 1 from s)
        returning id, "key", "value"
    )
    select id, "key", "value"
    from i
    union all
    select id, "key", "value"
    from s
    

    行が存在しない場合は、挿入された行を返します。それ以外の場合は、既存の行を返します。

    ところで、「key」/「value」のペアがそれを一意にする場合、それは主キーであり、id列は必要ありません。 「キー」と「値」のペアの一方または両方がnullになる可能性がある場合を除きます。



    1. 4つの主要なデータベースIDEツールを比較する

    2. SQLServerのVARCHARから数字以外の文字を削除する最速の方法

    3. AccessはODBCデータソースとどのように通信しますか?パート6

    4. RecyclerViewでSQLiteデータを表示する