Обновите таблицу с предложением where для значения столбца In Postgresql - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть имя таблицы table вот так

| label_id| label_name | user_id|
----------------------------------
|    1    | insvt1     |   1    |
|    2    | invest2    |   1    |
|    3    | invest3    |   1    |
|    4    | ivsest3    |   2    |
|    5    | invest4    |   3    |

Я хочу обновить этот столбец user_id для user_id 1,1,1 with user_id 2, если label_name не совпадает, если имя метки такое же, как row 3 and row 4 then no update will occur

Результат должен быть таким после обновления

| label_id| label_name | user_id|
----------------------------------
|    1    | insvt1     |   2    |
|    2    | invest2    |   2    |
|    3    | invest3    |   1    |
|    4    | ivsest3    |   2    |
|    5    | invest4    |   3    |

Я пробовал это

UPDATE data_table t, data_table t1
   SET t.user_id = 2
 WHERE t.label_name <> t1.label_name (!= this also)
   AND (t.user_id = 1 or t1.user_id=2)

это обновление, но также и обновление, где оба lebel_name одинаковы

Любая помощь будет цениться

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Ваш код выглядит как MySQL. Это предполагает использование JOIN для логики c:

UPDATE data_table t JOIN
       (SELECT label_name, COUNT(*) as cnt
        FROM data_table t1
        GROUP BY label_name
        HAVING COUNT(*) = 1
       ) tt
       ON t.label_name = tt.label_name
   SET t.user_id = 2
   WHERE t.user_id = 1;

В Postgres, это выглядит так:

UPDATE data_table t 
   SET t.user_id = 2
   FROM (SELECT label_name, COUNT(*) as cnt
         FROM data_table t1
         GROUP BY label_name
         HAVING COUNT(*) = 1
        ) tt
    WHERE t.label_name = tt.label_name AND t.user_id = 1;
0 голосов
/ 09 апреля 2020

приведенный ниже код должен это сделать:

update data_table
SET [user_id] = 2
WHERE label_name IN ( SELECT label_name FROM data_table GROUP BY label_name HAVING COUNT(*) = 1) AND [user_id] = 1

Объяснение: вы обновляете таблицу данных, но ТОЛЬКО те строки, для которых описание метки встречается только один раз. так что критерии я написал в label_name IN (....)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...