使用同一 table 中同一列的值更新一列
Update a column with values of the same column in the same table
在 postgres 中我想更新如下。
我的 table product
有这些列
- uuid
- 已售出
- product_id
- variant_id
- 数据
我想用 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'
我认为 product_id
和 variant_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)
)
在 postgres 中我想更新如下。
我的 table product
有这些列
- uuid
- 已售出
- product_id
- variant_id
- 数据
我想用 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'
我认为 product_id
和 variant_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)
)