0

我有一个表 A,其中包含值

NAME     AGE
Loga     18
Anitha   20
Saranya  13

我测试了表值,例如 if 条件使用 case 语句 case when AGE>=18 then 'major' else 'minor' 然后结果是

NAME     AGE  CASE
Loga     18  'major'  
Anitha   20  'major'
Saranya  13  'minor'

我想在我的 A 表中永久添加 CASE 和结果值。是否可能?

4

2 回答 2

2
alter table a add column new_column_name text;

update a
set new_column_name = case when age >= 18 then 'major' else 'minor' end
于 2013-05-08T11:52:27.237 回答
0

您需要首先使用ALTER TABLE ... ADD COLUMN将该列添加为 NULLable ,然后为所有现有值填充它;然后您可能希望将其设置为不可为空:

ALTER TABLE a ADD COLUMN new_column text NULL;
UPDATE a SET new_column = CASE WHEN age >= 18 THEN 'major' ELSE 'minor' END;
ALTER TABLE a ALTER COLUMN new_column SET NOT NULL;

这将填充初始值,并强制为新值填充列,但不会反映任何更改(因此您将能够更新age到超过 18,但将标签保留为'minor')。

如果 和 新列之间的关系age应该始终成立,您可能需要研究更复杂的内容:

  • 强制所有行匹配条件的检查约束
  • 插入或更改年龄时自动更新新列的触发器
  • 使用视图或函数在一个地方捕获'major'/'minor'逻辑,但不将其冗余存储在表本身上
于 2013-05-08T11:54:34.717 回答