【发布时间】:2016-03-14 14:27:28
【问题描述】:
我目前正在使用过滤器表单来显示一组产品。产品名称位于表 a 中,过滤器标签位于表 b 中。选择过滤器后,查询需要返回表 a 中符合所有选择条件的所有产品。
我当前的查询是(这个例子选择了两个过滤器):
SELECT a.genus
,a.botanical
FROM a
WHERE a.ID IN (
SELECT filter.filtered
FROM (
SELECT b.ID AS filtered
,COUNT(*) c
FROM b
WHERE b.tag_ID = 1
OR b.tag_ID = 2
GROUP BY b.ID
HAVING c = 2
) AS filtered
)
所以,首先,这确实有效;但是,我想知道是否缺少一些简化此查询的愚蠢简单的方法。 . .还是我应该接受这一点并继续前进?
我尝试了许多不同类型的连接,但都没有成功。如果只选择一个过滤器,那么简单的 LEFT JOIN 将是完美的。当我需要处理多个过滤器选择时会遇到问题。
【问题讨论】:
-
您到底希望输出是什么?您的查询似乎运行良好..
-
它工作正常。我真的在寻找一个不需要跟踪所选过滤器数量的查询(对于“HAVING c = x”),尽管我不完全确定这样的查询是否存在。