如何查询关联2个及以上产品的制造商名称
解决查询拥有2个及以上产品的制造商问题
你的查询错误原因
- 第一个查询:
WHERE子句里的(SELECT COUNT(product.id))会统计整个product表的总记录数(当前是11),并非每个制造商的产品数量;同时,聚合条件(比如基于分组的数量判断)应该用HAVING而非WHERE——WHERE用于过滤行数据,HAVING用于过滤分组后的结果。 - 第二个查询:除了上述逻辑错误,还存在表名拼写错误(把
product写成了producto),导致查询找不到对应表,直接返回空集。
正确的SQL查询方法
方法一:关联后分组筛选
直接关联两张表,按制造商分组后,用HAVING筛选产品数量≥2的制造商:
SELECT manufacturer.name FROM product INNER JOIN manufacturer ON product.manufacturer_id = manufacturer.id GROUP BY manufacturer.id, manufacturer.name HAVING COUNT(product.id) >= 2;
这里按manufacturer.id分组是为了避免出现同名制造商的情况,保证分组的准确性。
方法二:先统计再关联
先在product表中统计每个制造商的产品数量,筛选出符合条件的制造商ID后,再关联manufacturer表获取名称:
SELECT m.name FROM ( SELECT manufacturer_id, COUNT(id) AS product_count FROM product GROUP BY manufacturer_id HAVING product_count >= 2 ) AS product_stats INNER JOIN manufacturer m ON product_stats.manufacturer_id = m.id;
这种写法在数据量较大时,统计逻辑提前执行,能减少关联的数据量,提升查询效率。
预期返回结果
根据你提供的测试数据,查询会返回以下制造商名称:
- Asus
- Lenovo
- Hewlett-Packard
- Crucial
内容的提问来源于stack exchange,提问作者deghuy
相关产品推荐
相关产品推荐

