Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 列一对多关系的三个条件_Mysql_Sql_Database - Fatal编程技术网

Mysql 列一对多关系的三个条件

Mysql 列一对多关系的三个条件,mysql,sql,database,Mysql,Sql,Database,有两种表产品,颜色 在产品和颜色之间存在一对多关系 产品表: 身份证、头衔、描述 颜色表: 标识、产品标识、颜色名称 现在我想做一个查询,选择颜色表中全部(例如)有三种颜色(“红色”、“绿色”、“棕色”)的产品一种方法是: 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)

有两种表产品颜色产品颜色之间存在一对多关系

产品表: 身份证、头衔、描述

颜色表: 标识、产品标识、颜色名称

现在我想做一个查询,选择颜色表中全部(例如)有三种颜色(“红色”、“绿色”、“棕色”)的产品

一种方法是:

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

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