我在查明如何设置查询方面遇到了一些麻烦。
我有一个简单的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语句作为对象类型,但无法编译查询...我希望这不是很难创建。
答案 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