【问题标题】:three condition for a column one-to-many relation列一对多关系的三个条件
【发布时间】:2018-04-21 01:26:50
【问题描述】:

有两个表格 Products , Colors 产品颜色之间存在一对多关系。

产品表: ID,标题,描述

颜色表: id,product_id,color_name

现在我想查询 products 在颜色表中选择所有(例如)三种颜色('red'、'green'、'brown')

【问题讨论】:

  • 请不要犹豫,告诉我们你到目前为止做了什么

标签: mysql sql database


【解决方案1】:

一种方法是:

select c.product_id
from colors c
where c.color_name in ('red', 'green', 'brown')
group by c.product_id
having count(distinct color_name) = 3;

【讨论】:

    【解决方案2】:

    如果您想从colors 表中选择所有颜色,请尝试以下查询。

    它将选择所有颜色,并且不限于3种颜色

    SELECT c.product_id
    FROM colors c
    WHERE c.color_name IN (SELECT DISTINCT color_name FROM colors)
    GROUP BY c.product_id
    HAVING COUNT(DISTINCT color_name) = (SELECT COUNT(DISTINCT color_name) FROM colors);
    

    如果您需要获取产品的标题和描述,那么:

    SELECT * FROM products WHERE id in (
    SELECT c.product_id
    FROM colors c
    WHERE c.color_name IN (SELECT DISTINCT color_name FROM colors)
    GROUP BY c.product_id
    HAVING COUNT(DISTINCT color_name) = (SELECT COUNT(DISTINCT color_name) FROM colors));
    

    【讨论】:

      【解决方案3】:

      拥有是要走的路。

      SELECT p.id, p.title, p.description
      FROM products p
      INNER JOIN colors c ON p.id = c.product_id
      GROUP BY p.id, p.title, p.description
      HAVING COUNT(DISTINCT c.id) = 3
      

      【讨论】:

        猜你喜欢
        • 2011-08-10
        • 2022-01-11
        • 1970-01-01
        • 2019-03-21
        • 1970-01-01
        • 2014-05-15
        • 1970-01-01
        • 2020-04-15
        • 2016-03-11
        相关资源
        最近更新 更多