Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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 在WHERE in子句中使用列两次_Mysql - Fatal编程技术网

Mysql 在WHERE in子句中使用列两次

Mysql 在WHERE in子句中使用列两次,mysql,Mysql,我有一组产品,每个产品都有一组与其相关联的过滤器。因此,我: table: products {id, name} table: filters {id, name, type} table filters_to_products {id, filter_id, product_id} 没有使用外键。一切都是逻辑实现的 我的过滤器有两种类型:大小和颜色 问题:我想从一组颜色中选择至少一种颜色,从一组尺寸中选择至少一种尺寸的产品,因此我基本上想到了中的WHERE IN子句,但这不起作用,因为:

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

table: products {id, name}
table: filters {id, name, type}
table filters_to_products {id, filter_id, product_id}
没有使用外键。一切都是逻辑实现的

我的过滤器有两种类型:大小颜色

问题:我想从一组颜色中选择至少一种颜色,从一组尺寸中选择至少一种尺寸的产品,因此我基本上想到了
中的WHERE IN
子句,但这不起作用,因为:

select * from products 
left join filters_to_products 
  on products.id = filters_to_products.product_id 
where filters_to_products.filter_id in (1,2,3,4);
上面的查询虽然在技术上可行,但有错误,颜色和大小类型的过滤器混合在同一个括号中,因此我考虑使用两个不同的WHERE in子句,尽管如此,它不能同时用于一列


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

如果我们假设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

filter_to_products
是一个表,因此(1,2,3,4)中的
filter_to_products是无意义的。此查询将不会按原样运行。如果您可以共享一些示例数据和期望的结果,我们可以更轻松地帮助您,因为仅从您的解释还不清楚您需要什么。需要查看过滤器或过滤器的产品结构。我不知道你是否在使用键对,或者什么列的“大小”和颜色在哪个表中。。。样本数据预期结果在问题中总是一个加号!我已经清楚地说明了我的问题。我的问题与语法问题无关(这些问题是在键入问题时创建的),如果有人提问,那么这个问题对他们来说就没有意义。这可能对你有意义;但如果他们不明白;他们帮不上忙。请记住,我们免费提供帮助。那些不愿自助的人,很可能得不到他们所要求的帮助;但是我错过了。不再是了……哇。。不,我总是让我的左连接像内部连接一样,只是为了迷惑维护团队。(和我自己)对不起,有个问题。那么特定的过滤器ID集呢?您的查询只匹配任何同时具有大小和颜色的产品,但不会基于过滤器ID进一步匹配。