首页 > 解决方案 > 如何根据第 1 列更新第 2 列,然后根据第 2 列更新第 3 列

问题描述

我正在处理一个现有表,其中第 2 列和第 3 列中的数据缺失或不正确,因此我需要根据第 1 列更新这些列,然后在更新后第 2 列。

第 1 列是车辆“类别”(大型车、小型 suv 2wd、皮卡 4wd 等)。第 2 列应该是基于第 1 列中车辆类别的“type_id”(编号 1-6)。然后第 3 列是基于第 2 列中类型 id 的车辆“类型”(轿车、皮卡等)。

为了更新第二列“type_id”,我尝试了以下几种变体:

UPDATE mytable
SET type_id = CASE 
WHEN "class" = 'Compact Cars' then '1' ELSE type_id
WHEN "class" = 'Midsize Station Wagons' then '3' ELSE type_id
WHEN "class" = 'Minivan - 2WD' then '2' ELSE type_id
WHEN "class" = 'Minivan - 4WD' then '2' ELSE type_id

等等。

第 1 列中大约有 30 个不同的变量需要与第 2 列中的 ID 号相对应。从那里我需要使用与第 2 列中的数字相对应的基本车辆类型更新第 3 列。

任何帮助表示赞赏。

标签: sqlpostgresqlsql-updatecasepgadmin-4

解决方案


我真的不明白这里迭代逻辑的意义:正如我理解你的问题,你可以将一个类型 id 和一个类型关联到每个类。

表值在这里可能会派上用场:

update mytable t
set type_id = x.type_id, type = x.type
from (
    values 
        ('Compact Cars', 1, 'sedan'),
        ('Midsize Station Wagons', 3, 'foo'),
        ('Minivan - 2WD', 2, 'pickup'),
        ('Minivan - 4WD', 2, 'pickup'),
)  x(class, type_id, type)
where x.class = t.class

如果您要执行大量转码,将它们全部存储在一个表中会更简单,您可以直接加入您的查询。


推荐阅读