如何查询无对应订单的商品?现有SQL查询不生效是什么原因?
问题原因
你编写的查询无法返回正确结果的核心问题是连接类型选择错误,和COUNT计算结果是否为null无关:
INNER JOIN只会保留关联双方都存在匹配的记录,从未关联过任何收据的商品,在item表和items_receipts表做INNER JOIN的时候就会被直接过滤,根本不会进入后续的分组统计环节,因此HAVING COUNT(r.id)=0永远匹配不到任何符合要求的商品。
修正方案
将关联逻辑改为LEFT JOIN,保留所有商品记录后再做分组统计即可,修正后的代码如下:
@Query(value="SELECT i.name " + "FROM item as i " + "LEFT JOIN items_receipts as ir " + " ON i.id = ir.item_id " + "LEFT JOIN receipt as r " + " ON ir.receipt_id = r.id " + "GROUP BY i.id, i.name " + "HAVING COUNT(r.id) = 0" ,nativeQuery = true) List<String> fiveSales();
补充说明:部分SQL方言要求SELECT子句中未使用聚合函数的字段必须出现在GROUP BY子句中,因此在GROUP BY中额外添加了i.name字段,避免语法报错。
内容的提问来源于stack exchange,提问作者Dark Knight
相关产品推荐
相关产品推荐

