Postgresql 如何使用不同的值更新多行?

Postgresql 如何使用不同的值更新多行?,postgresql,Postgresql,Thaks@Tim Biegeleisen,但不需要排在行尾的,。在这段代码中,第一部分(电子邮件)工作正常,但第二部分(mobileno)不工作。我在结束后用,和不用,都试过了 UPDATE table_name SET email = CASE id WHEN 1 THEN email1 WHEN 2 THEN email2 ...

Thaks@Tim Biegeleisen,但不需要排在行尾的
。在这段代码中,第一部分(电子邮件)工作正常,但第二部分(mobileno)不工作。我在结束后用
和不用
都试过了

UPDATE table_name
    SET
        email = CASE id WHEN 1 THEN email1
                        WHEN 2 THEN email2
                        ...
                        WHEN 22 THEN email22 END
        mobileno = CASE id WHEN 1 THEN 00000
                           WHEN 2 THEN 11111
                           ...
                           WHEN 22 THEN 2222222222 END
    WHERE
        id BETWEEN 1 AND 22;

最好的选择可能是创建一个单独的表,其中包含基于某个id的所需电子邮件和移动值。如果没有此项,我们可以在此处使用一个大的
大小写
表达式:

UPDATE table_name
SET
    email = CASE id WHEN 1 THEN email1,
                    WHEN 2 THEN email2,
                    ...
                    WHEN 22 THEN email22 END,
    mobileno = CASE id WHEN 1 THEN 00000,
                       WHEN 2 THEN 11111,
                       ...
                       WHEN 22 THEN 2222222222 END
WHERE
    id BETWEEN 1 AND 22;
假设您确实有一个带有
id
值和电子邮件/手机号码的表,您可以在这里进行更新连接:

UPDATE table_name AS t1
SET email = t2.email, mobileno = t2.mobileno
FROM temp_table_name t2
WHERE t1.id = t2.id;

我将使用
VALUES
子句(类似于INSERT语句):


谢谢,希望这能奏效。但我认为第一个非常耗时Biegeleisen@EmranulIslam是的,第一个选项是次优的,但我提供它只是为了防止您无法使用适当的表来保存更新值。@Tim Biegeleisen谢谢,但不需要在行尾。在这段代码中,第一部分(电子邮件)工作正常,但第二部分(mobileno)不工作。我试过这两种方法,结束后和结束后。Postgres语法+1的真正大师。
UPDATE table_name t
  SET email = v.email, 
      mobileno = v.mobileno 
from ( 
  values 
    (1, 'email1', '00001'),
    (2, 'email2', '00002'),
    (3, 'email3', '00003'),
    ....
    (22, 'email22', '00022')
) as v(id, email, mobileno)
where t.id = v.id;