Sno*_*irl 2 database oracle performance union oracle10g
我有一个表有多个存储文本值的列.例如:
ID FATHER_NAME MOTHER_NAME
--------------------------------
1 Henry Sarah
2 Martin Rebecca
3 Martin Nancy
Run Code Online (Sandbox Code Playgroud)
我想获得表中的所有名称.我知道我可以做一个工会来做到这一点:
(SELECT FATHER_NAME FROM MY_TABLE)
UNION
(SELECT MOTHER_NAME FROM MY_TABLE)
Run Code Online (Sandbox Code Playgroud)
但是,在我的真实表中,我需要联合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;
Run Code Online (Sandbox Code Playgroud)
或者你可以使用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
Run Code Online (Sandbox Code Playgroud)
UNION由于它试图获取DISTINCT值,可能会更慢.