我在构建以下场景的查询时遇到问题,而不使用多个子查询。
产品按颜色,大小等过滤器分类。颜色是一个过滤器组,包含实际颜色的过滤器:绿色,红色,蓝色,..
见图片:
就像它写在图像上一样,是否可以检索产品,例如蓝色或绿色,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号)
答案 0 :(得分:2)
你可以这样做
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 演示