Обновить столбец со значениями того же столбца в той же таблице - PullRequest
0 голосов
/ 31 декабря 2018

В postgres я хотел бы обновить, как показано ниже.

В моей таблице product есть эти столбцы

  • uuid
  • продано
  • product_id
  • variable_id
  • data

Я хотел бы обновить uuid всех записей sold = true с помощью uuid записей с этими product_id и option_id.

Например,

Если это моя таблица enter image description here

Я хотел бы обновить записи с product_id = 203 и option_id = 1 доесть такой же UUID.И записи с product_id = 3242 и variable_id = 3 для того же uuid и т. Д.

Как должен выглядеть запрос на обновление?

Каким должен быть запрос на обновление?даже если либо product_id, либо variable_id имеет значение NULL ??

Postgresql версия 10.3

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Полагаю, что 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)
  )
0 голосов
/ 31 декабря 2018

Используйте UPDATE с соединением к той же таблице.Этот запрос обновляет строки, где 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

...