【发布时间】:2014-10-03 05:16:22
【问题描述】:
我希望加入多个表,例如-Categories、menus、restaurants、reviews 等。
以返回提供插入食物的餐厅的价格。
除了reviews 表中的numberOfReviews 之外,一切正常。
如果餐厅没有评论,则 0 列的输出应为 0,但应检索其他列值,即价格、名称等。
通过以下查询,我得到所有字段为null 和count(numReviews) 为0:
select r.id
,r.`Name`
,r.`Address`
,r.city
,r.`Rating`
,r.`Latitude`
,a.`AreaName`
,m.`Price`
,count(rv.id)
from `categories` c, `menus` m, `restaurants` r, areas a, reviews rv
where m.`ItemName`="tiramisu"
and c.`restaurant_id`=r.`id`
and m.`category_id`=c.id
and r.`AreaId`=a.`AreaId`
如果我不能在where 子句中匹配rv.restaurant_id=r.id(显然)。
我哪里错了?我该如何解决?
已编辑
select r.id,
r.`Name`,
r.`Address`,
r.city,
r.`Rating`,
r.`Latitude`,
a.`AreaName`,
m.`Price`,
r.`Longitude`,
r.Veg_NonVeg,
count(rv.id)
from restaurants r LEFT JOIN `reviews` rv on rv.`restaurant_id`=r.`id`
inner join `categories` c on c.`restaurant_id` = r.id
inner join `menus` m on m.`category_id` = c.id
inner join `areas` a on a.`AreaId` = r.`AreaId`
where m.`ItemName`="tiramisu"
【问题讨论】:
-
如果您想在
reviews表中没有匹配项时返回任何内容,则需要使用LEFT JOIN。 -
@Barmar - 谢谢我试过这个,但现在我写计数(rv.id)时只得到一行。查看我编辑的问题
-
count(numReviews)与count(rv.id)相同? -
你在找
COALESCE -
@z22 如果您在使用
COUNT()之类的聚合函数时想要多行,则需要使用GROUP BY来获取每个 ID 的单独计数。否则,它将所有内容合并为一个大数。