我有这些表
餐厅
restaurantID
restaurantName
locationID
位置
locationID
locationName
菜
dishID
DishName
restaurantID
price
查看
reviewID
dishID
rating
现在我想展示这些东西:
`restaurantName`, `locationName`, #dishes from 1 specific restaurant, # of reviews per restaurant
但是我对SQL代码感到有些困惑。
我有这台ATM:
SELECT
res.name, l.name,
(SELECT COUNT(dishID) FROM dish WHERE restaurantID = res.restaurantID),
(SELECT COUNT(r.reviewID))
FROM
restaurant res, location l, review r, dish d
WHERE
res.locationID = l.locationID
AND r.dishID = d.dishID
AND d.restaurantID = res.restaurantID
GROUP BY
res.restaurantID
它会显示我想要的所有内容,除了没有评论的餐厅。
但我希望计数为0,而不是根本不显示。
答案 0 :(得分:0)
LEFT JOIN用于您想要包含在您加入的表格中找不到匹配项的结果(例如,此restaurant_id不会被任何菜肴使用,或者这道菜不匹配任何评论;您仍然希望它有一个GROUPING后的结果中的行)。但是,位置很可能是强制性的,因此如果需要,请使用常规连接。
SELECT res.name, l.name, COUNT(dishID) as dish_count, COUNT(r.reviewID) as review_count
FROM restaurant res
JOIN location l ON res.locationID = l.locationID
LEFT JOIN dish d on d.restaurantID = res.restaurantID
LEFT JOIN review r on r.dishID = d.dishID
GROUP BY res.restaurantID
此用例也不需要子查询,使用连接时可以消除这些。