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

前端之家收集整理的这篇文章主要介绍了sql – 使用“not in”子查询编写select语句的最有效的方式是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
编写类似下面的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值,您可以对没有匹配项的所有内容进行过滤.

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

猜你在找的MsSQL相关文章