这两种解决方案的结果相同吗?
SELECT *
FROM Orders
LEFT JOIN OrderLines ON OrderLines.OrderID=Orders.ID
AND Orders.ID = 12345
select orderID
into #temp
from OrderLines
where orderID=12345
SELECT *
FROM Orders
LEFT JOIN #temp t ON t.OrderID=Orders.ID
我想用临时表来表现
2条答案
按热度按时间fivyi3re1#
此查询将为您提供
所有的记录
Orders
table匹配的记录来自
OrderLines
仅适用于带有ID = 12345
对于所有其他订单,您将发现订单行为空。让我们考虑一下您的第一个查询,您只从中获取这些记录
OrderLines
哪里OrderId = 12345
然后把它和Orders
table。因此您的查询输出将所有的记录
Orders
table对于医嘱ID 12345,医嘱行将可用,对于所有其他医嘱行,
Orderlines
将为空所以是的,两个查询都将提供相同的输出。
nnt7mjpx2#
我想用临时表来表现
我的基本React是:克服它。临时表在某些情况下非常有用,特别是当脚本运行多个查询并且需要共享某个子查询时。但是,它们会在创建表、用数据加载表,然后再次读取表时产生开销。这可能是一个很大的开销。
不过,总的来说,在开发数据库及其优化器方面付出了大量的努力。您通常可以相信优化器会做正确的事情。没有必要试图胜过优化器。
有时,优化器并不完美。大多数数据库都支持使用提示来生成更合适的查询计划。在某些情况下,您可能会发现使用适当的索引创建临时表会产生更好的查询计划。
在大多数情况下,第一个查询将比第二个查询快。如果不是的话
OrderLines
可能已经过时了。