所以我有这些表:
Products
--------
Product ID | Quantity
和
OrdersLines
-----------
Product ID | Amount --(multiple lines with the same ID)
我正在使用此选项:
SELECT
P.ProductID,
P.Quantity,
SUM(OL.Amount) AS Ordered
FROM atbl_Sales_Products AS P
INNER JOIN atbl_Sales_OrdersLines AS OL ON OL.ProductID = P.ProductID
GROUP BY P.ProductID, P.Quantity
HAVING P.Quantity > SUM(OL.Amount)
如果在两个表中都使用ProductID
,则选择正常。
但是,如果ProductID
表中未使用OrdersLines
,或Amount
表中Null
使用showTab()
,则不会包含此类行。
答案 0 :(得分:2)
如果您想跨表连接但总是需要包含来自联接一侧或另一侧的记录,那么您需要使用OUTER JOIN
之一,而不是INNER JOIN
。你的SQL。如果您想要包含atbl_Sales_Products
中的记录,即使atbl_Sales_OrderLines
中的ProductID
与LEFT JOIN
相同,但您应使用WHERE
。
如评论中所述,您可以使用HAVING
子句中使用的任何运算符和EXECUTE sp_configure;
GO
-- enable execution of external script add an argument:
EXECUTE sp_configure 'external scripts enabled', 1;
GO
RECONFIGURE;
GO
子句。
答案 1 :(得分:1)
SELECT
P.ProductID,
P.Quantity,
SUM(OL.Amount) AS Ordered
FROM atbl_Sales_Products AS P
LEFT JOIN atbl_Sales_OrdersLines AS OL
ON P.ProductID = OL.ProductID
GROUP BY P.ProductID, P.Quantity
HAVING SUM(OL.Amount) IS NULL
OR P.Quantity > SUM(Ol.Amount)

附加的OR声明解决了我的问题。