Sql 红移:如何创建使用查找表的函数

Sql 红移:如何创建使用查找表的函数,sql,amazon-redshift,Sql,Amazon Redshift,我有一张花名册 Id int primary key, Name varchar(100) 我想创建一个函数fngetloster(int),它将通过搜索花名册表返回名称 Id int primary key, Name varchar(100) 像这样: create or replace function fnGetRoster(int) returns varchar(100) stable as $$ select name from Roster where Id = $1

我有一张花名册

Id int primary key,
Name varchar(100)
我想创建一个函数fngetloster(int),它将通过搜索花名册表返回名称

Id int primary key,
Name varchar(100)
像这样:

create or replace function fnGetRoster(int)
returns varchar(100)
stable
as $$
    select name from Roster where Id = $1
$$ language sql
我发现在红移中很难做到这一点,因为我无法使用from、where等

我能做什么?我是否错误地使用了该函数

============================新添加的信息(在回答1个问题后)====================

我看到很多人提到存储过程和join。谢谢,但请原谅我没有很好地描述整个问题,因为原始问题有点长,所以我问了简单的版本。 我正在迁移旧表并创建新结构。其中一个字段包含如下内容

Category
CatA : CatB : CatC : ..... : CatX
其中另一个表名为Category

Id     ParentId      CategoryName 
-----+-------------+-----------------
1    |    NULL     | CatA
-----+-------------+-----------------
2    |    1        | CatB
-----+-------------+-----------------
3    |    2        | CatC
-----+-------------+-----------------
4    |    3        | CatD
-----+-------------+-----------------
不好的是,这个表中没有categoryID类型的东西,所以我必须分析整个字符串以找出categoryID。我不能直接使用字符串的最后一部分,因为不能保证名称是唯一的。(但可以保证完整类别名称是唯一的)。我希望写一个函数来进行分析,然后给出一个Id,但我发现函数的设计目的似乎与红移不同。。。
现在,我正在努力与程序。。。我正在考虑将此数据迁移任务移出红移(仅用于存储结果)

您需要创建一个,而不是一个标量用户定义函数

然而,考虑到您的用例,这是不可取的。这将非常低效,并将导致性能不佳

您应该使用
JOIN
来获取此类数据,例如:

选择
某物
花名册名称
从另一张桌子
加入花名册(other_table.花名册\u id=花名册.id)

这将针对选择进行高度优化。

红移不允许在函数中使用FROM、INTO、WHERE、GROUP BY、ORDER BY、LIMIT。请注意,您应该考虑使用courseLot的连接(不是用于查询),这是正在使用的,如果有一个函数,它会很好。连接可以完成这项工作,但会使事情变得非常复杂。这是SQL!连接是您使用的。