选择仅具有特定值的行组?

时间:2020-03-24 08:01:13

标签: mysql

我想按具有is_shown = 1的product_group_id选择产品组的行。

Product Table
+----+------------------+---------+----------+
| id | product_group_id |   name  | is_shown |
+----+------------------+---------+----------+
| 1  |        1         |  apple  |     1    |
| 2  |        1         |  orange |     1    |
| 3  |        1         |  kiwi   |     0    |
| 4  |        2         |  table  |     1    |
+----+------------------+---------+----------+

我的sql语句是

SELECT * FROM product WHERE is_shown = 1 GROUP BY product_group_id

我需要的是具有is_shown = 1的行。

所以我的预期结果是我只会得到一行

Product Table
+----+------------------+---------+----------+
| id | product_group_id |   name  | is_shown |
+----+------------------+---------+----------+
| 4  |        2         |  table  |     1    |
+----+------------------+---------+----------+

购买,我仍然获得product_group_id = 1。

请帮助。谢谢

3 个答案:

答案 0 :(得分:0)

您可以为此使用子查询。
获取所有product_group_id并将其用于过滤行。

SELECT 
  * 
FROM
  Products 
WHERE 
  product_group_id IN 
  (
    SELECT 
      product_group_id 
    FROM 
      Products 
    GROUP BY
      product_group_id 
    HAVING 
      min(is_shown) = 1
  )

答案 1 :(得分:0)

然后将它们排除在外:

SELECT
    *
FROM
    Product
WHERE 
    product_group_id NOT IN (
        SELECT
            product_group_id
        FROM
            Product
        WHERE
            is_shown = 0
    )

选择除product_group_id之外的所有具有is_shown =0的产品

答案 2 :(得分:0)

希望对您有帮助...

SELECT
  * 
FROM
  Product 
WHERE
  product_group_id NOT IN ( 
    SELECT
      product_group_id 
    FROM
      Product 
    WHERE
      is_shown != 1
  ) 
GROUP BY
  product_group_id