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

时间:2014-08-11 19:10:45

标签: sql enums

我在查明如何设置查询方面遇到了一些麻烦。

我有一个简单的2列表,它将对象id(int)与标记(string)相匹配。还有一个遗留数据类型,对象类型(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语句作为对象类型,但无法编译查询...我希望这不是很难创建。

2 个答案:

答案 0 :(得分:0)

在我看来就像一个简单的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

虽然你可能需要做一些额外的连接来使用Object Table中的Type来获取你的TypeName。你没有提到数据库中“Awesome”和“Super”的来源。

答案 1 :(得分:0)

假设

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