使用WHERE IN子句中的列两次

时间:2017-05-02 18:38:09

标签: mysql

我有一组产品,每个产品都有一组与之相关的过滤器。因此,我有:

table: products {id, name}
table: filters {id, name, type}
table filters_to_products {id, filter_id, product_id}

没有使用外键。一切都是逻辑上实现的。

我的过滤器有两种类型:尺寸颜色

问题 :我想选择一组颜色中至少有一种颜色且一组尺寸至少有一种颜色的产品,因此{{1基本上我想到了这个条款,但这不起作用,因为:

WHERE IN

上面的查询,虽然技术上有效,但有错误,颜色和大小类型的过滤器混合在同一个括号中,因此我想到制作两个不同的WHERE IN子句,但是,它不适用于同一列的一个时间。

我该怎么办?我认为解决方案与嵌套查询有关,如果是这样,我应该如何处理?

1 个答案:

答案 0 :(得分:1)

如果我们假设F.Type的值至少为{Size,Color}

然后我们需要做的就是加入三个表并确保我们根据这些类型进行过滤。然后我们确保我们对2的类型有明确的记录数....这将保证产品至少具有尺寸和颜色属性。 有办法检查它只有那两个,但我不相信这是问题..但是......

SELECT P.ID, P.Name
FROM PRODUCTS P
INNER JOIN FILTERS_TO_PRODUCTS FP
 on P.ID = FP.Product_ID
INNER JOIN FILTERS F
 on F.ID = FP.Filter_ID
WHERE F.Type in ('Size','Color')
GROUP BY P.ID, P.Name
HAVING Count(Distinct F.Type) = 2