限制postgreSQL更新命令

Moh*_*hit 14 sql postgresql

我有一个给定结构的表,现在我想写一个查询,将2 xx产品从状态1转移到状态2.子代码目前与我无关.

master_code| child_code | status_code
-----------|------------|------------
    xx     |    xx1     |     1
    xx     |    xx2     |     1
    xx     |    xx3     |     1
    xx     |    xx4     |     2
    xx     |    xx5     |     2
    yy     |    yy1     |     3
    yy     |    yy2     |     2
    zz     |    zz1     |     1
    zz     |    zz2     |     1
Run Code Online (Sandbox Code Playgroud)

我已经实施了基本检查,当我使用时

update only product_child
set product_status=1
where product_status=2
Run Code Online (Sandbox Code Playgroud)

所有三个xx都有代码2,我想控制它,我期待只有一个xx将通过此命令获得代码更改

Joh*_*n D 21

如果你不关心哪一行得到更新,我会非常警惕(请为表添加一个PK),然后你可以使用类似下面的内容:

UPDATE
    product_child
SET
    product_status = 1
WHERE
    CTID IN ( SELECT CTID FROM product_child WHERE product_status = 2 and master_code = 'xx' LIMIT 1 )
Run Code Online (Sandbox Code Playgroud)

CTID是唯一的行标识符 - 通过将子选择限制为1个记录,我们返回一个对应于满足WHERE子句的行的CTID.


Moh*_*hit 6

我找到了一个方法

update only product_child
set product_status =1
where product_child_code in (select product_child_code
                from product_child
                where product_code = get_product_code('Baby Crib') 
                and product_status = 2 
                limit 5)
Run Code Online (Sandbox Code Playgroud)

  • 只有在处理继承表时才需要 `only` 关键字。它在“常规”桌子上什么都不做。 (3认同)