如何使SQL查询功能

时间:2013-06-27 17:46:29

标签: sql postgresql

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

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%

由于

2 个答案:

答案 0 :(得分:1)

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

Make       Type
Ford       Explorer 
Chevrolet  Lumina 
Ford       Crown 
Subaru     Legacy

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

答案 1 :(得分:1)

或者你可以做......

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

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