【发布时间】:2014-07-24 10:05:50
【问题描述】:
我有一个大的 Oracle 表(大约 4000 万行),如下所示:
ID Name Question Answer Reason
3 Name1 1 Yes blah blah
3 Name1 2 No NA
3 Name1 3 No NA
3 Name1 4 Yes blah2
3 Name1 5 Yes null
3 Name1 6 Yes blah3
3 Name1 7 No null
6 Name2 1 Yes blah4444
6 Name2 2 No null
6 Name2 3 Yes blah3
6 Name2 4 NA blah5
6 Name2 5 Yes null
6 Name2 6 Yes blah6
6 Name2 7 NA null
每个 ID 我需要一行,即我需要为每个问题的答案(每个 ID 有 7 个问题)和每个问题的原因添加列。我需要让它看起来像这样:
ID Name Q1 Q1-Reason Q2 Q2-Reason Q3 Q3-Reason etc.
3 Name1 Yes blah blah No null
6 Name2 Yes blah4444 No null
我的查询目前如下所示:
select
A.ID,A.NAME,B1.Q1,B1.Q1-REASON,B2.Q2,B2.Q2-REASON
from
TABLENAME A
inner join
(
select distinct C1.ID,C1.ANSWER as Q1,C1.REASON as Q1-REASON
from TABLENAME C1
where C1.QUESTION=1
) B1 on B1.ID=A.ID
inner join
(
select distinct C2.ID,C2.ANSWER as Q2,C2.REASON as Q2-REASON
from TABLENAME C2
where C2.QUESTION=2
) B2 on B2.ID=A.ID
...
...
但是,由于表很大,检索数据需要很长时间。有人可以建议优化此查询的方法吗?
我使用的是 Oracle 10g 和 SQLDeveloper 4.0.2.15
【问题讨论】:
-
感谢您的评论,马特!我刚刚编辑了问题以包含该信息。
标签: sql performance oracle inner-join