SQL等价于关系代数DIVISION

时间:2013-10-30 22:37:05

标签: sql relational-algebra

这是一个例子     T(A) = RENTED(A,C) / BOATS(C)

select distinct R1.A from RENTED R1  
where not exists                     
  (select * from SAILBOAT S     
   where not exists                  
     (select * from RENTED R2        
      where R1.A = R2.A              
        and R2.C = S.C)              
   );

我的问题是,如果NOT EXISTS只返回TRUEFALSESELECT distinct R1.A如何知道要返回哪些值?

例如这个 jsfiddle

如果存在数字= 5

,此查询将在数字列中返回所有内容

1 个答案:

答案 0 :(得分:1)

正如wildplasser和sqlvogel所提到的,子查询对外部查询中的每一行都执行一次。

子查询的结果( TRUE / FALSE )确定是否返回外部查询中的行。总是,外部查询的父键(标识符)列将在子查询中被引用,以检查其在其他表中是否存在。此引用使子查询成为“ correlated subquery ”。

请参阅更新后的fiddle