我在不使用几个子查询的情况下为以下情况构造查询时遇到问题。
产品按颜色,尺寸等一些过滤器进行分类。颜色是一个过滤器组,其中包含实际的颜色:绿色,红色,蓝色等。
见图片:
就像写在图像上一样,是否可以在不使用子查询的情况下检索例如蓝色或绿色以及L大小的产品?
我想出的是每个过滤器组的子查询,但这似乎效率很低:
SELECT * FROM myTable
# colors subquery
WHERE productid IN (SELECT productid FROM myTable
WHERE filterid = 1 OR filterid = 2)
# sizes subquery
AND productid IN (SELECT productid FROM myTable
WHERE filterid = 3);
(filterid具有唯一的ID号)
你可以这样
SELECT productid
FROM table1
WHERE filterid IN(1, 2, 3)
GROUP BY productid
HAVING MAX(filterid IN(1, 2)) = 1
AND MAX(filterid = 3) = 1
样本输出:
| PRODUCTID | | ----------- | | 2 |
如果您需要返回此类产品的所有列,则只需返回表即可
SELECT *
FROM
(
SELECT productid
FROM table1
WHERE filterid IN(1, 2, 3)
GROUP BY productid
HAVING MAX(filterid IN(1, 2)) = 1
AND MAX(filterid = 3) = 1
) q JOIN table1 p
ON q.productid = p.productid;
样本输出:
| PRODUCTID | FILTERGROUPID | FILTERID | | ----------- | --------------- | ---------- | | 2 | 1 | 2 | | 2 | 2 | 3 | | 2 | 3 | 6 |
这是SQLFiddle演示
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句