我遇到了一个SQL命令,我加入了两个表。我有两张桌子:一家餐馆'表和评论'表。这个关系是一家餐馆的很多评论。加入桌子后,我对每家餐厅都有很多评论,因此我最终为每家餐厅提供了许多复制品。我需要的是将重复的餐馆行分组,以便在我实施的搜索结果中一次输出一个餐馆。到目前为止的代码是:
SELECT a.Restaurant_Id, a.Restaurant_Name, a.Restaurant_Location,
a.Restaurant_Image, a.Restaurant_Thumbnail, a.Restaurant_Owner, a.Restaurant_Description
FROM restaurant a INNER JOIN review b
ON a.Restaurant_Id=b.Restaurant_Id
对复制的餐厅条目进行分组的最简单方法是什么(我不需要从“评论”表中输出任何数据,我只是将其加入了'餐厅& #39;我网站上的搜索功能表?)
我需要来自'餐厅的列数据。 table(在上面的select语句中定义),以便在我的网站上输出餐馆信息(作为餐馆列表)。 e.g。
Id Name Location Image Thumbnail Owner Description
-------------------------------------------------------------------------------
10 Red Lion Manchester 8 A description...
由于
答案 0 :(得分:1)
您似乎只想确保餐厅至少有一次评论才能列出。您可以使用LEFT OUTER JOIN
或WHERE EXISTS
来完成此要求。
LEFT OUTER JOIN:
SELECT DISTINCT a.Restaurant_Id, a.Restaurant_Name, a.Restaurant_Location,
a.Restaurant_Image, a.Restaurant_Thumbnail, a.Restaurant_Owner, a.Restaurant_Description
FROM restaurant a LEFT OUTER JOIN review b
ON a.Restaurant_Id=b.Restaurant_Id
WHERE b.Restaurant_Id IS NOT NULL;
在哪里存放:
SELECT a.Restaurant_Id, a.Restaurant_Name, a.Restaurant_Location,
a.Restaurant_Image, a.Restaurant_Thumbnail, a.Restaurant_Owner, a.Restaurant_Description
FROM restaurant a
WHERE EXISTS
(SELECT b.Restaurant_Id
FROM review b
WHERE a.Restaurant_Id=b.Restaurant_Id);
答案 1 :(得分:0)
编辑:如评论中所述,事实证明该表包含IMAGE数据,因此无法比较。这意味着GROUP BY和DISTINCT都会失败。我会把它留下来,因为它可能会让它在某些时候对其他人显而易见。
您可以按要返回的所有字段进行分组。
SELECT a.Restaurant_Id, a.Restaurant_Name, a.Restaurant_Location,
a.Restaurant_Image, a.Restaurant_Thumbnail, a.Restaurant_Owner, a.Restaurant_Description
FROM restaurant a INNER JOIN review b
ON a.Restaurant_Id=b.Restaurant_Id
GROUP BY a.Restaurant_Id, a.Restaurant_Name, a.Restaurant_Location,
a.Restaurant_Image, a.Restaurant_Thumbnail, a.Restaurant_Owner, a.Restaurant_Description
与对它们进行DISTINCT相同但速度更快。
SELECT DISTINCT a.Restaurant_Id, a.Restaurant_Name, a.Restaurant_Location,
a.Restaurant_Image, a.Restaurant_Thumbnail, a.Restaurant_Owner, a.Restaurant_Description
FROM restaurant a INNER JOIN review b
ON a.Restaurant_Id=b.Restaurant_Id
但是,实际上,如果你可以避免加入,那你就更好了。