数据库SQL Server 问题求助

求解释两个notexists后面子查询的作用,... 求解释两个not exists后面子查询的作用, 展开
 我来答
ICodeY
2019-04-20 · TA获得超过163个赞
知道小有建树答主
回答量:186
采纳率:86%
帮助的人:90.8万
展开全部
1、首先,这条sql 使用了(not exists),这条sql思路大体是这样的:
某个order,取名为R, 如果10308这个order下某个订单商品不在R订单下的订单商品中,那么R这个order就不符合条件;
2、sql拆解分析:首先明确not exists 的意思是:其后没有数据返回,那么被select的数据才被加入到结果集中;
1)第一个not exists 和第二个not exists之间的sql:
"select 1 from OrderItems” a where a.OrderID=10308"
这个查询的意思是:查询出订单为10308的所有订单商品;其后面的not exists就是对这个结果集的过滤;
2)第二个not exists 后面的sql:
"select 1 from OrderItems b where p.OrderID=b.OrderID and a.ProduceID=b.ProductID"
这个查询的意思是:10308这个订单的订单商品是否存在与p这个订单中的订单商品中;
3)将前两步中的sql结合起来:
“select 1 from OrderItems a where a.OrderID=10308
and not exists
(select 1 from OrderItems b where p.OrderID=b.OrderID and a.ProduceID=b.ProduceID)”
这个sql的意思是:在10308这个订单的所有订单商品中,是否存在某个商品不再p订单的订单商品中;
4)最后对Orders的筛选sql:
“select * from orders p where not exists (第三步的查询结果)”
第三步中,如果存在那种情况,那么 第三步返回的数据是1,所以这条order就被过滤掉了,不会添加到结果集中;
如果存在那种情况,那么 第三步没有返回数据,所以这条order就会添加到结果集中;
*能力有限,只能讲到这种程度,如有不妥之处,海涵、见谅,兄弟;欢迎指正!
更多追问追答
追问

不好意思隔了这么久才看,我还是不懂这一步是什么意思
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式