繁体   English   中英

多个匹配条件

[英]multiple matching conditions

我正在尝试根据匹配的关键字过滤结果。 这部分我已成功实现。 但是,有必要使该匹配部分地排他性地进行,并且另一些地进行排他性地进行。 例如,如果用户选择了“大号”和“衬衫”,则该产品将需要专门匹配它们。 但是用户可能希望看到红色,绿色和蓝色(包括两端)的内容。 我该如何实现? 以下是基本概念,但是UNION似乎不起作用:

SELECT id
FROM Filters
WHERE disabled = '0' AND filter IN ('large','shirt')
GROUP BY id 
HAVING COUNT(filter) = 2

UNION DISTINCT

SELECT id
FROM Filters
WHERE disabled = '0' AND filter IN ('red','green','blue') 
GROUP BY id 
HAVING COUNT(filter) > 1

谢谢!

如果我正确地遵循了您的说明,则应该能够将聚合查询与HAVING BY子句一起使用,该子句使用条件聚合来实现逻辑。

考虑以下查询:

SELECT id
FROM Filters
GROUP BY id
HAVING
    MAX(CASE WHEN filter = 'large' THEN 1 END) = 1
    AND MAX(CASE WHEN filter = 'shirt' THEN 1 END) = 1
    AND MAX(CASE WHEN filter IN ('red','green','blue') THEN 1 END) = 1

细节:

此汇总条件可确保此id包含filter = 'large'的记录:

MAX(CASE WHEN filter = 'large' THEN 1 END) = 1

这将检查此id是否有一条记录,其中filter = 'shirt'

    MAX(CASE WHEN filter = 'shirt' THEN 1 END) = 1

并检查至少三种颜色中的一种可用:

MAX(CASE WHEN filter IN ('red','green','blue') THEN 1 END) = 1

如果需要,您应该能够使逻辑适应您的确切要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM