1

我有这三张桌子。

表格1:

Resource1
Resource2
Resource3

表2:

Period1
Period2
Period3

表3:

Resource1 Period1
Resource1 Period2
Resource1 Period2
Resource2 Period1
Resource2 Period1
Resource3 Period3

我需要得到这个结果:

Resource1 Period1
Resource1 Period2
Resource1 Period2
Resource1 Period3
Resource2 Period1
Resource2 Period1
Resource2 Period2
Resource2 Period3
Resource3 Period3
Resource3 Period1
Resource3 Period2

我尝试了外部连接,但没有效果。我发现交叉连接可能会有所帮助,但我没有成功实施它。能有这么好心的人帮我解决这些问题吗?

非常感谢,r。

4

2 回答 2

1

我得到了你的结果,但我不确定我的想法是否正确..

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

于 2013-05-07T08:28:22.363 回答
1

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

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 ) 
;

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

于 2013-05-07T08:48:28.200 回答