我正在寻找一个替代SQL查询到下面的语句:到凡在产品条款的替代过滤
SELECT COUNT(`id`) FROM `products`
WHERE
`category` = "Motors" AND
`id` IN(SELECT `id` FROM `products` WHERE
`Horsepower` > 200 AND
`id` IN(SELECT `id` FROM `products` WHERE
`Manufacturer` = "Baldor"))
正如你所看到的,理论上(因为我没有具体测试)子查询全部选择产品ID。然后,从最终的产品ID列表中生成COUNT。当有许多嵌套查询时,此方法可能会变慢。
我正在做一个过滤系统。因此,选择一个或多个过滤器和子过滤器,并基于当前选择生成COUNT。
如果我可以创建一条SQL语句来返回基于任意数量的子过滤器的产品数量(不创建“WHERE IN”子句),那将会是太棒了。
上述查询可以简单地使用WHERE ... AND子句。问题在于使用类似下面的东西作为子查询,因为它需要选择多个条件:
SELECT `products`.`id` FROM `products`
LEFT JOIN `attributes` ON `attributes`.`product_id` = `products`.`id`
WHERE `attributes`.`Label` = "Horsepower" AND
`attributes`.`Value` > 200
SELECT `products`.`id` FROM `products`
LEFT JOIN `attributes` ON `attributes`.`product_id` = `products`.`id`
WHERE `attributes`.`Label` = "Category" AND
`attributes`.`Value` = "Motors"
似乎毫无意义。为什么不只是一个'where category =马达和马力> 200和制造商= balor'? –
你需要什么子查询?你不能只写一个where子句吗? – ragol
你可以从字面上删除第4行和第6行,以及第2行的''''。 –