如何将SQL结果集输出限制为1个结果而不是每个查询结果?

时间:2019-02-20 12:19:10

标签: java mysql sql jsp while-loop

我正在使用一个包含搜索功能的Web应用程序,当用户提交与该餐厅匹配的查询时,该功能会返回该餐厅。

例如,如果用户输入“ Pizza”并输入“ Whiskey”,则我希望结果输出匹配的餐厅一次。

相反,此确切的查询导致餐厅名称出现多次。

表格:

Foodtbl Drinkstbl Restaurantstbl

SQL代码:

" SELECT r.restname, r.type, r.location, r.website, r.reviews, r.PageLink"
                                    + " FROM restaurants r, food f, drinks d"
                                    + " WHERE SOUNDEX(f.foodcategory) = SOUNDEX(?)"
                                    + " AND SOUNDEX(d.drinkvariety) = SOUNDEX(?)"
                                    + " AND r.restid = f.restid"
                                    + " AND r.restid = d.restid");

循环结果时:

<% while (restResults.next()) { %>
                                    <td><%= restResults.getString("restname") %></td>
                                    <td><%= restResults.getString("type") %></td>
                                    <td><%= restResults.getString("location") %></td>
                                    <td><a href="<%= restResults.getString("website") %>"</a>Go to Website</td> 
                                    <td><a href="<%= restResults.getString("reviews") %>"</a>Go to Reviews</td>
                                    <td><a href ="<%= restResults.getString("PageLink") %>"</a>More Info</td>

这是我的SQL语句问题还是循环问题?

谢谢。

1 个答案:

答案 0 :(得分:0)

由于您仅从餐厅中选择字段,并且不使用聚合函数,因此可以添加DISTINCT
这样返回的记录将是唯一的。

此外,最好使用最新的JOIN语法而不是过时的逗号语法。

" SELECT DISTINCT r.restname, r.type, r.location, r.website, r.reviews, r.PageLink"
  + " FROM restaurants r"
  + " JOIN food f ON f.restid = r.restid"
  + " JOIN drinks d ON d.restid = r.restid"
  + " WHERE SOUNDEX(f.foodcategory) = SOUNDEX(?)"
  + "   AND SOUNDEX(d.drinkvariety) = SOUNDEX(?)");