使用同一 table 中同一列的值更新一列

Update a column with values of the same column in the same table

在 postgres 中我想更新如下。

我的 table product 有这些列

我想用 product_id 和 variant_id.

的记录的 uuid 更新所有 sold=true 记录的 uuid

例如

如果这是我的table

我想用 product_id=203 和 variant_id = 1 更新记录以具有相同的 uuid。 product_id = 3242 和 variant_id=3 的记录具有相同的 uuid 等等。

更新查询应该是什么样的?

更新查询应该是什么样的?即使 product_id 或 variant_id 中的任何一个为 NULL ??

PostgreSQL 版本 10.3

使用 UPDATE 连接到同一个 table。此查询更新 sold = 't' 的行,如果我误解了您需要在最后两行 't' 和 'f' 中切换

UPDATE product AS p 
SET uuid = p2.uuid
FROM product p2
WHERE p2.product_id = p.product_id
  AND (p2.variant_id = p.variant_id  OR p2.variant_id IS NULL OR p.variant_id IS NULL)
  AND p.sold = 't'
  AND p2.sold = 'f'

db-fiddle

我认为 product_idvariant_id 不可能都是 NULL:

update product p1 set uuid = p2.uuid from product p2
where p1.sold = 't' and p2.sold = 'f'
  and (
    (p2.product_id = p1.product_id and p2.variant_id = p1.variant_id)
    or
    (p2.product_id IS NULL and p2.variant_id = p1.variant_id)
    or
    (p2.product_id = p1.product_id and p2.variant_id IS NULL)
  )