我想知道是否可以从配置单元中的现有列创建新列。
假设我有一个表People (name string, age int)
,我想添加一个is_old string
定义为 的列if(age > 70, 'old', 'not_old')
。有没有办法做到这一点?
People_temp
我目前能想到的唯一方法是从旧表创建一个新表,删除旧表并重命名新表,如下所示:
create table People_new as select name, age, if(age > 70, 'old', 'not_old') as is_old from People;
drop table People;
alter table People_new rename People;
Run Code Online (Sandbox Code Playgroud)
** 有没有办法在不创建临时表的情况下执行此操作?
(例如,oracle 有计算列的想法。)
是的,有一种方法可以在不创建临时表的情况下做到这一点。添加列然后插入覆盖表从其自身选择:
ALTER TABLE People ADD COLUMNS (is_old string);
INSERT OVERWRITE TABLE People
SELECT name, age, if(age > 70, 'old', 'not_old') as is_old
FROM People ;
Run Code Online (Sandbox Code Playgroud)