代码之家  ›  专栏  ›  技术社区  ›  A. L

仅当行存在时更新(如果存在)

  •  0
  • A. L  · 技术社区  · 6 年前

    UPDATE
        creator.contacts
    SET
        status = 'accepted'
    WHERE
        (
            account_id = $1
            AND
            contact_id = $2
        )
        OR
        (
            account_id = $2
            AND
            contact_id = $1
        )
    

    SELECT
        COUNT(*)
    FROM
        creator.contacts
    WHERE
        account_id = $1
        AND
        status = 'pending'
    

    是否可以将此合并到一个查询中?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Nick SamSmith1986    6 年前

    您可以将该条件添加到您的 WHERE 子句作为 EXISTS 测验请注意,您需要添加 () 围绕您现有的 哪里

    UPDATE
        creator.contacts
    SET
        status = 'accepted'
    WHERE
        ((
            account_id = $1
            AND
            contact_id = $2
        )
        OR
        (
            account_id = $2
            AND
            contact_id = $1
        ))
        AND
            EXISTS (SELECT * 
                    FROM  creator.contacts
                    WHERE
                       account_id = $1
                    AND
                       status = 'pending')