2

我有一个表,其中包含多个存储文本值的列。例如:

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。

4

1 回答 1

6

如果您使用的是 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值,它可能会更慢。

于 2012-10-10T20:24:45.713 回答