我正在尝试创建一个函数,该函数将根据查找表中的分数和版本号返回标签
所以我有一个查找表
标签 | 版本 | 分钟 | 最大 |
---|---|---|---|
高 | 1 | 7 | 10 |
医学 | 1 | 3 | 6 |
低 | 1 | 0 | 2 |
高 | 2 | 8 | 10 |
医学 | 2 | 5 | 7 |
低 | 2 | 0 | 4 |
create function get_label(score int, version int, vector string)
returns varchar
language sql as
$$
select label
from lookup
where version = coalesce(version, to_number(substr(vector,2,1)))
and score between min and max;
$$
我有各种表,我想设置派生标签的新列。当我运行更新语句时,其中一些有一个版本,另一些有一个包含版本号的向量。
alter table my_table
set derived_label = get_label(score,version,null);
alter table my_table2
set derived_label = get_label(score,null,vector);
我收到以下错误
Unsupported subquery type cannot be evaluated
alter table my_table2
set derived_label = get_label(score,null,vector);
与
相同create or replace my_table2 as
select * exlcude (derived_label),
get_label(score,null,vector) as derived_label
form my_table2;
因此,在同意这是一个完整的表重写后,我们可以使用替换形式(您可能需要使用一些其他参数来确保存在连续性权限等)。
所以现在如果创建表作为选择
我们可以参与选择的工作:
select m.* exlcude (derived_label),
l.lookup as derived_label
form my_table2 as m
left join lookup as l
/* the get_label(score,null,vector) version */
on l.version = coalesce(null, to_number(substr(m.vector,2,1)))
and m.score between l.min and l.max;