sql语句的是否等价

naiveququer 2008-01-23 09:48:28
查询定购了23号产品20件以上的顾客的列表
sql语句1:
use northwind
select orderid,customid
from orders AS or1
where 20<(select quantity
from [order details] AS od
where or1.orderid=od.orderid
and od.productid=23)
这是相关子查询,相关子查询的执行方式是针对外层的每一条记录执行里层的查询,我写了另外两条sql语句:
use northwind
1.select quantity, od.orderid into _temp
from [order details] as od
where od.orderid in (select orderid from orders)
and od.productid=23
2. select orderid,customerid
from orders
where 20<(select quantity from _temp
where orders.orderid=_temp.orderid)
我执行了下,结果是一样的,但是我不知道这样改是否是等价的,想证明下,望高手赐教啊:)

...全文
140 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
naiveququer 2008-01-23
  • 打赏
  • 举报
回复
我想证明一下,但不知道怎么入手
不知各位有什么思路没
-狙击手- 2008-01-23
  • 打赏
  • 举报
回复
一样
昵称被占用了 2008-01-23
  • 打赏
  • 举报
回复
两个语句还是有区别的,第二个语句应该加上

drop table _temp 


否则第二次执行就出错了
昵称被占用了 2008-01-23
  • 打赏
  • 举报
回复
不过都有问题
如果
orders:[order details] === 1:N
子查询会出错
所以,这却语句应该是

select   orderid,customid 
from orders AS or1
where exists (select 1
from [order details] AS od
where or1.orderid=od.orderid
and od.productid=23
and od.quantity>20
)
yangjiexi 2008-01-23
  • 打赏
  • 举报
回复
等价的!
昵称被占用了 2008-01-23
  • 打赏
  • 举报
回复
等价

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧