假设我们有以下三种关系:
目录表中的Sid和Pid是引用供应商和零件的外键。记录(s1,p1)表示供应商s1已生成零件p1。
SELECT *
FROM parts P
WHERE ---(A)--- (SELECT S.Sid
FROM suppliers S
WHERE ---(B)--- (SELECT *
FROM catalog C
WHERE S.Sid=C.Sid AND P.Pid=C.Pid))
现在我们(A)和(B)的案例是:
假设以下示例表: sample tables
非常感谢
以下是给定样本表上每个案例的结果:
案例1 - >没有供应商生产的零件(40)
案例2 - >至少由供应商之一(10,20,30)生产的零件
案例3 - >某些供应商没有生产的零件(20,30,40?)
case4 - >由所有供应商生产的零件(10)
请解释如何获取它们并逐步解释逻辑
答案 0 :(得分:0)
在提到的场景中,三个查询彼此是dependent
。
Case 1
:如果Lower query
返回一些结果,那么它允许中间查询执行,类似地,如果middle query
没有返回任何结果,则执行upper query
Case 2
:如果Lower query
返回某些结果,则会让中间查询执行,如果middle query
返回任何结果,则会upper query
执行。
Case 3
:如果Lower query
没有返回任何结果,那么它会让中间查询执行,如果middle query
返回一些结果,它会让upper query
获得执行。
Case 4
:如果Lower query
没有返回任何结果,那么它允许中间查询执行,如果middle query
也没有返回任何结果,则允许upper query
被执行。
Explaining Case 1
:SELECT * FROM catalog C WHERE S.Sid=C.Sid AND P.Pid=C.Pid
返回所有三个表的连接
示例:
1 ali 10 A
1 ali 30 C
。
。
如果通过此连接条件获取某些记录,则middle query
SELECT S.Sid
FROM供应商S被执行它取出供应商表格中的所有sid。
从现在起middle query
也提供了一些结果,因此upper query
不会被执行,因此数据将从整个查询中获取。