我有一个包含多个存储文本值的列的表。例如:
ID FATHER_NAME MOTHER_NAME
--------------------------------
1 Henry Sarah
2 Martin Rebecca
3 Martin Nancy
我希望得到表格中的所有名字。我知道我可以做一个工会来做到这一点:
(SELECT FATHER_NAME FROM MY_TABLE)
UNION
(SELECT MOTHER_NAME FROM MY_TABLE)
然而,在我的真实表中,我需要联合15列,查询显然需要一段时间(大约12秒)。我仍然需要加入这些名称等等。除了做工会还有其他选择吗?
仅供参考:我正在使用Oracle。
答案 0 :(得分:5)
如果您使用的是Oracle 11g,则可以使用UNPIVOT
功能:
select id, value, col
from yourtable
unpivot
(
value for col in (FATHER_NAME, MOTHER_NAME) -- other columns will go here
) u;
或者您可以使用UNION ALL
代替UNION
,区别在于您不会获得DISTINCT
值:
select id, FATHER_NAME value, 'FATHER_NAME' col
from yourtable
union all
select id, MOTHER_NAME value, 'MOTHER_NAME' col
from yourtable
由于UNION
尝试获取DISTINCT
值,{{1}}可能会变慢。