加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 使用“not in”子查询编写select语句的最有效的方式是什

发布时间:2020-12-12 08:44:26 所属栏目:MsSql教程 来源:网络整理
导读:编写类似下面的select语句的最有效的方式是什么? SELECT *FROM OrdersWHERE Orders.Order_ID not in (Select Order_ID FROM HeldOrders) 当项目不在另一个表格中时,您希望从一个表格中获取记录. 解决方法 “最有效率”将根据表的大小,索引等而有所不同.换句
编写类似下面的select语句的最有效的方式是什么?
SELECT *
FROM Orders
WHERE Orders.Order_ID not in (Select Order_ID FROM HeldOrders)

当项目不在另一个表格中时,您希望从一个表格中获取记录.

解决方法

“最有效率”将根据表的大小,索引等而有所不同.换句话说,它将根据您使用的具体情况而有所不同.

根据情况,通常使用三种方式来完成所需的任务.

1.如果Orders.order_id被索引,并且HeldOrders相当小,您的示例工作正常.

另一个方法是“相关子查询”,这是你所拥有的一个微小的变化

SELECT *
FROM Orders o
WHERE Orders.Order_ID not in (Select Order_ID 
                              FROM HeldOrders h 
                              where h.order_id = o.order_id)

注意添加where子句.当HeldOrders有大量行时,这样做往往会更好. Order_ID需要在两个表中进行索引.

有时我使用另一种方法是外连接…

SELECT *
FROM Orders o
left outer join HeldOrders h on h.order_id = o.order_id
where h.order_id is null

当使用左外连接时,当有匹配的行时,h.order_id将具有匹配o.order_id的值.如果没有匹配的行,h.order_id将为NULL.通过检查where子句中的NULL值,您可以对没有匹配项的所有内容进行过滤.

这些变化中的每一个可以在各种情况下或多或少地有效地工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读