使用传统的集合运算 - 关系代数

时间:2014-10-11 20:52:14

标签: sql relational-database relational-algebra

非常感谢您阅读。

假设表格的以下摘录(供应商 - 零件SP)

------------------------
S# | P# | QTY 
------------------------
S1 | P1 | 30
S1 | P2 | 35
S1 | P3 | 40
S2 | P1 | 100
S2 | P2 | 50
S3 | P2 | 30
S4 | P1 | 40
S4 | P2 | 35

我有兴趣了解如何构建查询,仅基于 - 优先 关于工会,交叉路口,差异,产品,自然连接,分部等将返回的操作让我们说供应S2提供的所有部件的供应商编号。
我知道如果我使用:

SP [S# , P#] DIVIDEBY (SP WHERE S# = 'S2') [P#] 

我会得到供应商数字,这些数字至少>所有这些部分,但S2 我无法想象我如何能够形成查询以仅返回供应商编号,这些供应商编号提供与供应商S2相同的部件完全

这个问题是基于个人的科学兴趣。

1 个答案:

答案 0 :(得分:1)

如果这有帮助,请告诉我。我正在使用自我加入。

select *  
from infoz as t1 
inner join infoz as t2
on t1.P# = t2.P#
where t1.S# = 's2'

让我们过滤此信息......

select t2.S#, COUNT(t2.P#) as cnt
from infoz as t1 
inner join infoz as t2
on t1.P# = t2.P#
where t1.S# = 's2'
group by t2.S#

现在,您可以在此处查看S2的计数并按此过滤。

select *
from
(
select t2.S#, COUNT(t2.P#) as cnt
from infoz as t1 
inner join infoz as t2
on t1.P# = t2.P#
where t1.S# = 's2'
group by t2.S#
) as r1
where r1.cnt = (select count(t.P#) 
from infoz as t
where t.S# = 's2') and r1.S# ! = 's2'