任何更快的选项比Oracle数据库联盟(Any Quicker Option Than Oracle

2019-09-23 21:59发布

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

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秒)。 我仍然需要做的加入对这些名称等是否有任何其他的替代工会干什么?

FYI:我使用的是Oracle。

Answer 1:

如果您使用的是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拨弄演示

或者你可以使用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拨弄演示

UNION它试图获得可能是由于慢DISTINCT值。



文章来源: Any Quicker Option Than Oracle Database Union