我有两个表ShoppingLists和GroceryItems。 GroceryItems表包含ShoppingListId,后者用作ShoppingLists表的外键。我试图获取所有ShoppingLists和每个ShoppingList中包含的GroceryItems数,但我也想要返回没有杂货商品的ShoppingLists。
select s.Title, s.ShoppingListId, count(g.GroceryItemId) AS 'NoOfGroceryItems' FROM ShoppingLists s
JOIN GroceryItems g ON s.ShoppingListId = g.ShoppingListId
如何更改上述查询以返回预期结果?
如果我将JOIN更改为LEFT JOIN,则它仅返回购物清单中没有任何杂货商品的记录。
以下屏幕截图中的示例数据:
答案 0 :(得分:1)
尝试使用左外连接
select s.Title, s.ShoppingListId, count(g.GroceryItemId) AS 'NoOfGroceryItems'
FROM ShoppingLists s
left outer join JOIN GroceryItems g ON s.ShoppingListId = g.ShoppingListId
group by s.Title, s.ShoppingListId
如果没有杂货商品,您可能希望将零值替换为零
如果您需要使用连接
,可视化此图片