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值,您可以对没有匹配项的所有内容进行过滤. 这些变化中的每一个可以在各种情况下或多或少地有效地工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |