两个Tsql查询之间的区别

时间:2018-10-25 07:10:03

标签: sql tsql

哪个是更好的查询,两者之间有什么区别

    SELECT custid, companyname
    FROM Sales.Customers AS C
    WHERE EXISTS
    (SELECT *
    FROM Sales.Orders AS O
    WHERE O.custid = C.custid
    AND O.orderdate = '20180212');



    SELECT custid, companyname
    FROM Sales.Customers AS C
    INNER JOIN Sales.Orders AS O
    on O.custid = C.custid
    AND O.orderdate = '20180212'

1 个答案:

答案 0 :(得分:0)

根据数据和数据库,两个查询实际上可能具有相同的执行计划。这两个查询之间的主要结构差异是,如果联接版本在给定日期与多个订单匹配,则联接版本可能导致给定的客户记录重复多次。 EXISTS查询不会发生这种重复。因此,要使第二个连接版本相同,可以SELECT DISTINCT

SELECT DISTINCT custid, companyname
FROM Sales.Customers c
INNER JOIN Sales.Orders o
    ON o.custid = c.custid
WHERE o.orderdate = '20180212';

EXISTS查询通常是表达查询的最有效方法。您使用这两个版本中的哪个取决于您更喜欢哪个,想要什么输出以及哪个版本似乎有更好的执行计划。