带有 CASE 和多个条件的 PostgreSQL UPDATE 语句
PostgreSQL UPDATE statement with CASE and multiple conditions
我正在尝试根据 3 个条件更新 table 中的单个列。我尝试使用 CASE 语句,我可以获得 2 个条件,但不是第 3 个条件。这是条件的标准:
- 如果字段 transpond = 0 那么字段 transpondertype 应该是 'N'
- 如果字段 transpond = 1 那么字段 transpondertype 应该是 'A'
- 如果字段 modesquip = 1 那么字段 transpondertype 应该是 'S'
这是我想出的SQL:
UPDATE "myDatabase".myTable
SET transpondertype=(CASE
WHEN transpond=0 THEN 'N'
WHEN transpond=1 THEN 'A'
WHEN transpond=1 AND modesequip=1 THEN 'S'
END);
transpondertype 字段在前两个条件下正确更新,这是最后一个永远不会正确更新的 WHEN 语句(它根本不更改数据)。我最初尝试了 WHEN modesequip=1 THEN 'S'
,但也没有用。
我如何获取更新 CASE 语句所有 3 个部分的 transpondertype 字段的语句?
试试这个
UPDATE "myDatabase".myTable
SET transpondertype=(CASE
WHEN transpond=0 THEN 'N'
WHEN transpond=1 THEN
CASE WHEN modesequip=1
THEN 'S'
ELSE 'A'
END
END);
当 transpond=1 且 modesequip!=1 时 'A'
我正在尝试根据 3 个条件更新 table 中的单个列。我尝试使用 CASE 语句,我可以获得 2 个条件,但不是第 3 个条件。这是条件的标准:
- 如果字段 transpond = 0 那么字段 transpondertype 应该是 'N'
- 如果字段 transpond = 1 那么字段 transpondertype 应该是 'A'
- 如果字段 modesquip = 1 那么字段 transpondertype 应该是 'S'
这是我想出的SQL:
UPDATE "myDatabase".myTable
SET transpondertype=(CASE
WHEN transpond=0 THEN 'N'
WHEN transpond=1 THEN 'A'
WHEN transpond=1 AND modesequip=1 THEN 'S'
END);
transpondertype 字段在前两个条件下正确更新,这是最后一个永远不会正确更新的 WHEN 语句(它根本不更改数据)。我最初尝试了 WHEN modesequip=1 THEN 'S'
,但也没有用。
我如何获取更新 CASE 语句所有 3 个部分的 transpondertype 字段的语句?
试试这个
UPDATE "myDatabase".myTable
SET transpondertype=(CASE
WHEN transpond=0 THEN 'N'
WHEN transpond=1 THEN
CASE WHEN modesequip=1
THEN 'S'
ELSE 'A'
END
END);
当 transpond=1 且 modesequip!=1 时 'A'