Mysql 获取特定于百分比的数据分组外键

Mysql 获取特定于百分比的数据分组外键,mysql,sql,Mysql,Sql,表名:产品 产品标识名称 1测试1 2测试2 3测试3 表名称:产品类型 产品类型标识产品类型名称类型百分比 1. 1. 尼龙 50 2. 1. 棉 50 3. 2. 棉 50 4. 2. 聚 50 5. 3. 棉 50 6. 3. 丝 50 我需要得到50%棉和50%尼龙的产品,因此结果是: 产品标识名称 1测试1 请帮忙! 谢谢 有几种方法可以做到这一点 一种方法是多次将products表连接到product_类型表: select p.product_id,p

表名:产品
产品标识名称
1测试1
2测试2
3测试3

表名称:产品类型
产品类型标识产品类型名称类型百分比
1. 1. 尼龙 50
2. 1. 棉 50
3. 2. 棉 50
4. 2. 聚 50
5. 3. 棉 50
6. 3. 丝 50

我需要得到50%棉和50%尼龙的产品,因此结果是:
产品标识名称
1测试1

请帮忙!
谢谢

有几种方法可以做到这一点

一种方法是多次将products表连接到product_类型表:

select p.product_id,p.name 
from products p 
  inner join product_type pt1 on pt1.product_fk = p.product_id 
  inner join product_type pt2 on pt2.product_fk = p.product_id 
where pt1.type_name = 'cotton'
  and pt1.type_percentage = 50
  and pt2.type_name = 'nylon'
  and pt2.type_percentage = 50
另一个选项是使用
EXISTS

select p.product_id,p.name 
from products p 
where exists (
  select null 
  from product_type pt1 
  where pt1.product_fk = p.product_id 
    and pt1.type_name = 'cotton' 
    and pt1.type_percentage = 50
)
and exists (
  select null 
  from product_type pt2 
  where pt2.product_fk = p.product_id 
    and pt2.type_name = 'nylon' 
    and pt2.type_percentage = 50
)

据我所知,一个产品可以有多种类型?这里需要考虑的是数据库设计得不正确。因为任何产品都可以是多种产品类型,并且任何产品类型都可以是多种产品的一部分,所以您具有多对多关系。使用连接表解决这些问题。如果可能的话,我建议在继续之前规范化您的数据库。@Alternatex明白,谢谢您的建议,我也考虑过同样的事情。不幸的是,我正在处理一个现有的项目,更新结构将需要在编程方面进行重大更改,所以现在需要一个临时的紧急修复。但计划很快改版,所以任何建议都会大有帮助,谢谢!谢谢这太完美了,你帮我节省了很多时间。