我正在尝试根据匹配的关键字过滤结果。这部分我已经成功地实现了。然而,有必要使这种匹配有一些排他性,而另一些则包括在内。例如,如果用户选择了“大号”和“衬衫”,则产品将需要专门匹配它们。但是用户可能希望看到它们是红色、绿色和蓝色(包括在内)。我怎样才能做到这一点?以下是基本概念,但 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
这会检查 3 种颜色中是否至少有一种可用:
MAX(CASE WHEN filter IN ('red','green','blue') THEN 1 END) = 1
如果需要,您应该能够根据您的确切要求调整逻辑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句