【问题标题】:MySQL: Filter on multiple values in different rows but return only rows that match both valuesMySQL:过滤不同行中的多个值,但只返回匹配两个值的行
【发布时间】:2013-11-23 07:55:26
【问题描述】:

这个问题困扰我很久了,一直没搞清楚。

我想要的是找到匹配多个 option_ids 的所有产品,

例如:我想要所有具有选项 id 20 和 28 的产品 id。查询应该返回 2 个结果。产品 id 1 和 4 而不是返回 id 3,因为它只匹配选项 id 之一,而不是两者。

| product_id |  option_id |
---------------------------
| 1          |  20        |
| 1          |  24        |
| 1          |  28        |
| 2          |  28        |
| 3          |  19        | 
| 3          |  20        | 
| 3          |  28        |
| 4          |  28        | 
| 4          |  30        |
---------------------------

【问题讨论】:

    标签: php mysql sql filter


    【解决方案1】:
    SELECT product_id FROM table WHERE option_id IN (20,28) GROUP BY product_id
    

    【讨论】:

      【解决方案2】:
      SELECT product_id 
      FROM your_table 
      WHERE option_id IN (20,28) 
      GROUP BY product_id
      having count(distinct option_id) = 2
      

      【讨论】:

      • 谢谢你,我曾经用 group_concat 来搞定它,但现在不行了
      【解决方案3】:

      使用HAVING 子句:

      SELECT 
        product_id, 
        COUNT(DISTINCT option_id) AS option_count 
      FROM t 
      WHERE 
        option_id IN (20, 28) 
      GROUP BY 
        product_id 
      HAVING 
        option_count=2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-30
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 2019-12-22
        • 2017-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多