我有以下查询:
SELECT *
FROM CustomerShip
LEFT OUTER JOIN
(SELECT DISTINCT b.ShipSeq AS shipSeq
FROM Orders a,
CustomerShip b
WHERE a.OrderId IN (SELECT OrderId
FROM Orders
WHERE CustomerId = @CustomerId
AND OrderType <> 'A')
AND b.CustomerId = @CustomerId
AND b.ShipSeq = a.CustShip
AND OrderStatus <> 'C'
GROUP BY b.ShipSeq) i
WHERE CustomerId = @CustomerId
AND (Address NOT LIKE '%RETAIL%STORE%')
AND ShipSeq = i.ShipSeq(+)
ORDER BY ShipTo DESC, OrderDate DESC;
我很困惑为什么会有LEFT OUTER JOIN
?这个查询不会返回相同的结果吗?
SELECT *
FROM CustomerShip
WHERE CustomerId = @CustomerId
AND (Address NOT LIKE '%RETAIL%STORE%')
ORDER BY ShipTo DESC, OrderDate DESC;
我对SQL比较新,但在第一个查询返回第二个查询不会记录的其他记录的情况下会是什么情况?
答案 0 :(得分:0)
两个查询都会从Customership表中返回相同的记录集,但它们不会返回相同的信息。
第一个查询将从“i”查询返回CustomerShip + shipseq列中的所有列。 第二个查询只返回CustomerShip列。
答案 1 :(得分:0)
两个查询都返回相同的输出。但是第一个查询正在查找所有已发货的订单并使用订单表进行检查,其中ordertype&lt;&gt; A(虽然不确定这个含义)并确保已发货的记录的订单放在订单表中