我有这三张桌子。
表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
我尝试了外连接但没有效果。我发现可能交叉连接应该有帮助,但我没有成功实现它。可能是一个如此善良的人,并帮助我这些东西?
非常感谢, 河
答案 0 :(得分: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 )
;
这可能无法产生正确答案,具体取决于您所说的“我不知道如何摆脱不必要的行”。您提供的输出似乎不会丢弃表中的任何行,并且您没有提供任何规则。因此,如果这不能满足您的需求,您必须编辑您的问题以澄清问题。
答案 1 :(得分:0)
我得到你的结果,但我不确定我的想法是否正确..
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