我有这张桌子:
PRODUCTS(product_id, name, price)
(1,'Apple', $10)
(2,'Cherry', $20)
(3,'Watermelon', $30)
而且:
STOCK(product_id, number)
(1,5)
(1,3)
(2,5)
有了这个:
SELECT
PRODUCTS.product_id,
SUM(STOCK.number),
FROM
STOCK
INNER JOIN PRODUCTS ON PRODUCTS.product_id = STOCK.product_id
GROUP BY
PRODUCTS.product_id
我可以得到这个:
(Apple, 8)
(Cherry, 5)
但我希望得到这个:
(Apple, 8)
(Cherry, 5)
(Watermelon, 0)
这可以在MySQL中使用RIGHT JOIN完成,但在SQL Server中没有,关于如何实现这一点的任何想法?
答案 0 :(得分:1)
您可以使用LEFT JOIN
:
SELECT
PRODUCTS.product_id,
COALESCE(SUM(STOCK.number), 0)
FROM
PRODUCTS
LEFT JOIN STOCK ON PRODUCTS.product_id = STOCK.product_id
GROUP BY
PRODUCTS.product_id
注意: RIGHT JOIN
在SQL Server中也可用,语法与MySQL相同。
答案 1 :(得分:1)
使用LEFT JOIN
,如下所示,并使用ISNULL()
来补充没有库存的0。
DECLARE @PRODUCTSTABLE TABLE (product_id INT, name VARCHAR(10), price MONEY)
DECLARE @STOCK TABLE (product_id INT, number INT)
INSERT INTO @PRODUCTSTABLE
VALUES
(1,'Apple', 10),
(2,'Cherry', 20),
(3,'Watermelon', 30)
INSERT INTO @STOCK
VALUES
(1,5),
(1,3),
(2,5)
SELECT P.name, SUM(ISNULL(S.number,0))
FROM @PRODUCTSTABLE P
LEFT JOIN @STOCK S ON P.product_id=S.product_id
GROUP BY P.name