首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle Cross join

Oracle Cross join
EN

Stack Overflow用户
提问于 2013-05-07 15:17:45
回答 2查看 7.7K关注 0票数 1

我有这三张桌子。

Table1:

代码语言:javascript
复制
Resource1
Resource2
Resource3

Table2:

代码语言:javascript
复制
Period1
Period2
Period3

Table3:

代码语言:javascript
复制
Resource1 Period1
Resource1 Period2
Resource1 Period2
Resource2 Period1
Resource2 Period1
Resource3 Period3

我需要得到这样的结果:

代码语言:javascript
复制
Resource1 Period1
Resource1 Period2
Resource1 Period2
Resource1 Period3
Resource2 Period1
Resource2 Period1
Resource2 Period2
Resource2 Period3
Resource3 Period3
Resource3 Period1
Resource3 Period2

我尝试了外连接,但没有效果。我发现交叉连接可能会有所帮助,但我并没有成功地实现它。能有这么好的人帮我做这些事吗?

非常感谢,r。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-07 16:48:28

使用一个公用表表达式来生成所有的组合,然后使用一个外连接来包含table3中显示的重复项。

代码语言:javascript
复制
with cte as ( select resource, period
              from table1 cross join table2 )
select cte.resource
       , cte.period
from cte
     left outer join table3
          on (table3.resource = cte.resource
             and table3.period = cte.period ) 
;

这可能不会产生正确的答案,这取决于你所说的“我不知道如何摆脱不必要的行”。您呈现的输出似乎没有丢弃表中的任何行,并且您没有提供任何规则。因此,如果这不能给你想要的东西,你必须编辑你的问题来澄清问题。

票数 1
EN

Stack Overflow用户

发布于 2013-05-07 16:28:22

我知道你的结果,但我不确定我的想法是否正确。

代码语言:javascript
复制
SELECT A.RESOURCEID,B.PERIOD 
FROM 
TABLE1 A CROSS JOIN TABLE2 B
UNION ALL
SELECT RESOURCEID,PERIOD
FROM TABLE3 C
GROUP BY RESOURCEID,PERIOD
HAVING COUNT(*)>1

http://www.sqlfiddle.com/#!4/36667/2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16413349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档