SQL可以使用AND / OR和HAVING子句

时间:2017-07-25 22:17:45

标签: sql-server tsql

所以我有这些表:

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(),则不会包含此类行。

2 个答案:

答案 0 :(得分:2)

如果您想跨表连接但总是需要包含来自联接一侧或另一侧的记录,那么您需要使用OUTER JOIN之一,而不是INNER JOIN。你的SQL。如果您想要包含atbl_Sales_Products中的记录,即使atbl_Sales_OrderLines中的ProductIDLEFT 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声明解决了我的问题。