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 秒)。そして、私はまだこれらの名前などを結合する必要があります.ユニオンを実行する他の方法はありますか?

参考までに、私はオラクルを使用しています。

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代わりに使用できます。UNIONDISTINCT

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 に答える