代码之家  ›  专栏  ›  技术社区  ›  Surya

用同一表中同一列的值更新列

  •  0
  • Surya  · 技术社区  · 7 年前

    在Postgres中,我想更新如下。

    我的桌子 product 有这些列吗

    • UUID
    • 出售
    • 产品标识
    • 变种的
    • 数据

    我想用带有该产品标识和变量标识的记录的UUID更新所有sald=true记录的UUID。

    例如

    如果这是我的桌子 enter image description here

    我想用product_id=203和variant_id=1更新这些记录,使其具有相同的uuid。而product_id=3242,variant_id=3的记录具有相同的uuid等等。

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

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

    PostgreSQL 10.3版

    2 回复  |  直到 7 年前
        1
  •  2
  •   Joakim Danielson    7 年前

    对同一个表使用带有联接的更新。如果我误解您需要在最后两行中切换“t”和“f”,则此查询将更新sald='t'处的行。

    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

        2
  •  1
  •   forpas    7 年前

    我想没有理由 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)
      )