2

我有以下查询,我需要使用不同的名称多次运行它,但是如何创建所有查询的函数,以便我只需要运行该函数而不是一个一个地运行所有查询。

update clean.vehicles set make='Ford' where type ilike '%explorer%'
update clean.vehicles set make='Chevrolet' where type ilike '%lumina%'
update clean.vehicles set make='Ford' where type ilike '%crown%'
update clean.vehicles set make='Subaru' where type ilike '%suburu%'
update clean.vehicles set make='Subaru' where type ilike '%legacy%'
update clean.vehicles set make='Infiniti' where type ilike '%infinitie%'
update clean.vehicles set make='Ford' where type ilike '%windstar%'
update clean.vehicles set make='Volkswagen' where type ilike '%vw%'
update clean.vehicles set make='Mitsubishi' where type ilike '%mitsubishi%'
update clean.vehicles set make='Infiniti' where type ilike '%infiniti%'
update clean.vehicles set make='Chevrolet' where type ilike '%chev%'
update clean.vehicles set make='Chrysler' where type ilike '%plymouth%'    
update clean.vehicles set make='Chrysler' where type ilike '%plymoth%

谢谢

4

2 回答 2

1

当您指定类型时,您需要一个映射表来查找品牌(反之亦然)。

Make       Type
Ford       Explorer 
Chevrolet  Lumina 
Ford       Crown 
Subaru     Legacy

然后,当您调用函数 GetMake(type) 时,它会使用查询中的 Type 进行查询,返回 Make,然后您可以在上面的查询中使用结果。

于 2013-06-27T17:54:23.377 回答
1

或者你可以做...

UPDATE clean.vehicles
SET make = CASE
                WHEN type ilike '%explorer%'
                    THEN 'Ford'
                WHEN type ilike '%lumina%'
                    'Chevrolet'
                ELSE
                    make
           END

尽管不匹配的记录应该保持不变,但这将对每条记录进行更新。如果您只更新记录的子集,则可以添加 WHERE 子句以仅匹配这些类型。

于 2013-06-27T18:03:48.853 回答