繁体   English   中英

比Oracle Database Union更快的选择

[英]Any Quicker Option Than Oracle Database Union

我有一个表,该表具有多个存储文本值的列。 例如:

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。

如果使用的是Oracle 11g,则可以使用UNPIVOT函数:

select id, value, col
from yourtable
unpivot
(
  value for col in (FATHER_NAME, MOTHER_NAME) -- other columns will go here
) u;

请参见带有演示的SQL Fiddle

或者您可以使用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

请参见带有演示的SQL Fiddle

UNION可能会由于尝试获取DISTINCT值而变慢。

暂无
暂无

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

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