Использование выражения CASE
, безусловно, вариант. Тем не менее, он плохо масштабируется: в США более 50 штатов, поэтому вам нужно написать 50 when
ветвей, например:
case state
when 'North Carolina' then 'NC'
when 'Ohio' then 'OH'
when ...
end
Создание таблицы сопоставления кажется лучшей идеей. Это также хороший способ обеспечить ссылочную целостность (ie гарантирует, что используемые имена действительно являются именами состояний).
Это будет выглядеть так:
create table states (
code varchar(2) not null primary key,
name varchar(100) not null
);
В исходной таблице вы хотите иметь столбец, в котором хранится код состояния, с ограничением внешнего ключа, которое ссылается на states(code)
(вы также можете сохранить имя состояния, но это выглядит как менее эффективный вариант с точки зрения хранения ).
Сопоставление в запросах можно выполнить с помощью join
:
select t.*, s.name state_name
from mytable t
inner join states s on s.code = t.state_code