展开全部
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就会添加到结果集中;
*能力有限,只能讲到这种程度,如有不妥之处,海涵、见谅,兄弟;欢迎指正!
某个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就会添加到结果集中;
*能力有限,只能讲到这种程度,如有不妥之处,海涵、见谅,兄弟;欢迎指正!
ZESTRON
2024-09-04 广告
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸...
点击进入详情页
本回答由ZESTRON提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询