繁体   English   中英

SQL-选择列并根据枚举添加记录

[英]SQL - Select column and add records based on enum

我在弄清楚如何设置查询时遇到了麻烦。

我有一个简单的2列表,将对象id(int)匹配到标签(字符串)。 我还想将遗留数据类型,对象类型(int)转换为查询中的标记。 例如:

TAG TABLE := { ID, TAG } : (1, FOO), (1, MINT), (2, BAR), (3, FOOBAR), (5, SAUCY)

OBJECT TABLE := { ID, ..., TYPE } : (1, ..., 0), (2, ..., 0), (3, ..., 1),(4, ..., SAUCY)

然后,类型通过以下方式转移到标签(再次作为示例)

[ 0 -> AWESOME ], [ 1 -> SUPER]

因此,我的目标是进行查询,并使用此数据返回:

RETURN TABLE := { ID, TAG_NAME } : (1, AWESOME), (1, FOO), (1, MINT), (2, AWESOME), (2, BAR), (3, FOOBAR), (3, SUPER), (4, SAUCY), (5, SAUCY)

我将如何进行设置? 我尝试使用case语句作为对象类型,但是无法编译查询...我希望创建起来不太困难。

在我看来就像一个简单的UNION ALL:

SELECT ID, TAG FROM TagTable
UNION ALL
SELECT ID, CASE 
  WHEN TYPE=0 THEN 'AWESOME'
  WHEN TYPE=1 THEN 'SUPER'
  {etc}
END AS TAG 
FROM ObjectTable

尽管也许您需要做一些额外的连接才能使用对象表中的类型获得您的TypeName。 您没有提到数据库中“ Awesome”和“ Super”来自何处。

假如说

TRANSER_TABLE := {ID, Name} : (0, AWESOME), (1, SUPER)

你可以这样写:

select ID, TAG 
from TAG_TABLE

UNION ALL

select o.ID, t.Name 
from 
OBJECT_TABLE o
join TRANSER_TABLE t on o.TYPE = t.ID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM