如何查询所有商品价格均大于10的店铺及对应全部商品信息
你已经完成了核心的筛选符合条件店铺ID的逻辑,只要把这段逻辑作为过滤条件,关联两张表获取所需字段即可,参考写法如下:
SELECT s.name AS `name`, i.name AS item_name, i.price AS price FROM Shops s INNER JOIN Items i ON s.id = i.shop_id WHERE s.id IN ( SELECT shop_id FROM Items GROUP BY shop_id HAVING MIN(price) > 10 )
上述SQL的逻辑非常直白:先用子查询筛选出所有商品最低价格都大于10的店铺ID,再关联Shops表拿到店铺名称,关联Items表拿到对应店铺的所有商品信息,执行后输出的结果和你预期的完全一致。
如果希望SQL可读性更高,也可以用CTE(公共表表达式)的写法,逻辑和上面完全相同:
WITH qualified_shops AS ( SELECT shop_id FROM Items GROUP BY shop_id HAVING MIN(price) > 10 ) SELECT s.name AS `name`, i.name AS item_name, i.price FROM Shops s INNER JOIN qualified_shops qs ON s.id = qs.shop_id INNER JOIN Items i ON s.id = i.shop_id
你之前关联出错大概率是没有对子查询筛选出的店铺ID做过滤,直接关联了全量的表数据,加上上述的过滤条件即可解决问题。
内容的提问来源于stack exchange,提问作者user13914470
相关产品推荐
相关产品推荐

