【发布时间】:2018-04-21 01:26:50
【问题描述】:
有两个表格 Products , Colors 产品和颜色之间存在一对多关系。
产品表: ID,标题,描述
颜色表: id,product_id,color_name
现在我想查询 products 在颜色表中选择所有(例如)三种颜色('red'、'green'、'brown')
【问题讨论】:
-
请不要犹豫,告诉我们你到目前为止做了什么
有两个表格 Products , Colors 产品和颜色之间存在一对多关系。
产品表: ID,标题,描述
颜色表: id,product_id,color_name
现在我想查询 products 在颜色表中选择所有(例如)三种颜色('red'、'green'、'brown')
【问题讨论】:
一种方法是:
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;
【讨论】:
如果您想从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));
【讨论】:
拥有是要走的路。
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
【讨论】: