[英]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.