当前位置: 首页 > 知识库问答 >
问题:

MySQL:如果在其中一个子记录中找到了每个搜索条件,则选择Record

贝自怡
2023-03-14

在本例中,我有3个表:hotels、categories、hotel_category_infos。

-----------------------
| id | name           |
-----------------------
|  1 | Hotel England  |
|  2 | Hotel Scotland |
|  3 | Hotel Ireland  |
|  4 | Hotel Norway   |
-----------------------
--------------------------------------------------
| id | name                                      |
--------------------------------------------------
|  1 | Ground floor without steps                |
|  2 | Washing facilities wheelchair accessible  |
|  3 | Special infrastructure on location        |
--------------------------------------------------

表“hotel_category_infos”:一个类别对一个酒店的实际分配,并对该酒店的一个类别进行了额外的精确描述。

-----------------------------------------------------------------------
| id | hotel_id | cat_id | description                                |
-----------------------------------------------------------------------
|  1 |        1 |      1 | No steps, except the one to the bla bla... |
|  2 |        1 |      2 | The entrance to the shower is 56cm wide... |
|  3 |        2 |      1 | The ramp at the entrance is 5% steep       |
|  4 |        3 |      1 | Except on the terrace                      |
|  5 |        3 |      2 | Ask for rooms in the first floor           |
|  6 |        3 |      3 | A indoor swimming pool is available for... | 
-----------------------------------------------------------------------

我想做的是:

在搜索表单中,所有类别都以复选框的形式列出,所以在发送表单之后,我就有了一个包含所有选中的类别ID的数组。我想列出所有对这些类别都有任务的酒店(不仅仅是其中一个)。

SELECT 
    hotels.id 
FROM 
    hotels INNER JOIN hotel_category_infos ON         
        hotel_category_infos.hotel_id = hotels.id AND 
    hotel_category_infos.cat_id IN (1,2)

共有1个答案

邓焱
2023-03-14

您需要进行两次集合比较,因为没有任何一行hotel_category_infos同时具有cat_id=1cat_id=2

SELECT id
FROM hotels
WHERE id IN (SELECT hotel_id FROM hotel_category_infos WHERE cat_id = 1)
    AND id IN (SELECT hotel_id FROM hotel_category_infos WHERE cat_id = 2)

我在这里完全消除了连接,因为考虑到您返回的字段,这是不必要的。

 类似资料:
  • 问题内容: 我有一个带有表的数据库,看起来像这样: 有数十万条记录。每个可以在7个不同的表之一中,对应于一个表: 我想要一个从每个类别中选择1个随机项目的查询。解决这个问题的最佳方法是什么?我知道使用和用于类似的随机查询,但是我从未做过这样的事情。 问题答案: 此查询以随机顺序返回加入类别的所有项目: 要将每个类别限制为一个类别,请将查询包装在 partial中 : 请注意,当查询同时具有and

  • 问题内容: 是否有更好的方法从MySQL表中获取多个“前X个”结果?当不同的 foo 的数量很少时,我可以通过联合轻松地完成此操作: 我显然可以继续为foo的每个值添加联合。但是,当foo有500多个不同的值并且我需要每个值的前X个时,这是不切实际的。 问题答案: 这种查询可以用“每组最大n”来表述,您希望每个“组”的前10个得分为“ foo”。 我建议您看一下这个链接,它很好地处理了这个问题,从

  • 问题内容: 我试图从看起来像这样的数据库表结果中选择前2条记录 我试过这个查询 但是有些主题,例如失踪的地方,我什至尝试了以下链接的建议 如何选择每个组的前N行? 但是我为每个受检者得到两个以上 我究竟做错了什么? 问题答案: 您可以使用相关的子查询: 该查询通过串联三列来构造单列主键。如果您有真正的主键(如),则可以用代替。 SQL Fiddle中的示例。

  • 问题内容: 有一个包含数据的表,如下所示: 如果我运行查询,我将得到的结果为: 什么查询将返回以下结果? 即,应返回每个组中的最后一条记录。 目前,这是我使用的查询: 但这看起来效率很低。还有其他方法可以达到相同的结果吗? 问题答案: MySQL 8.0现在支持窗口功能,就像几乎所有流行的SQL实现一样。使用这种标准语法,我们可以编写每组最多n个查询: 以下是我在2009年为此问题写的原始答案:

  • 问题内容: 我有一张桌子,我想在该表格的基础上从每个组中获取前N个项目。如果我设置了那将从每个组中选择第一行,或者如果我设置了那那将从每个组中选择前5行。请帮我。 问题答案: 有多种方法可以做到这一点。这是一个使用相关子查询的查询:

  • 问题内容: 嗨,我是Spark SQL的新手。我有一个这样的数据框。 我想为每个列表器在Spark sql中选择前10个时间戳值。 我尝试了以下查询。它引发错误。 我想为每个列表器选择我需要采用的前10个时间戳值。任何帮助将不胜感激。 问题答案: 这不行吗? 编辑: 哦,我明白了。您要: