求SQLite查询语句:获取剩余库存及销售表无对应库存的商品
嘿,这两个SQLite查询需求我帮你梳理好了,直接看具体实现:
1. 查询当前剩余库存
假设你的stock表包含product_name(商品名称)和initial_stock(初始库存数量)字段,sales表包含product_name(商品名称)和sales_quantity(单次销售数量)字段。剩余库存的逻辑是初始库存减去该商品的累计销量,对应的SQL语句如下:
SELECT s.product_name, s.initial_stock - COALESCE(SUM(sa.sales_quantity), 0) AS remaining_stock FROM stock s LEFT JOIN sales sa ON s.product_name = sa.product_name GROUP BY s.product_name, s.initial_stock;
这里用LEFT JOIN是为了确保那些没有销售记录的商品也能被统计到(此时累计销量为0),COALESCE函数用来处理NULL值,避免出现计算错误。
2. 查询sales表中存在但stock表中不存在的商品名称
这个需求可以通过两种常用方式实现,你可以根据自己的习惯选择:
方法一:使用LEFT JOIN + IS NULL
SELECT DISTINCT sa.product_name FROM sales sa LEFT JOIN stock s ON sa.product_name = s.product_name WHERE s.product_name IS NULL;
LEFT JOIN会保留sales表的所有记录,当stock表中没有匹配的商品时,对应的stock字段会是NULL,通过筛选这个NULL值就能得到目标商品。加上DISTINCT是为了避免重复的商品名称。
方法二:使用NOT EXISTS子查询
SELECT DISTINCT product_name FROM sales sa WHERE NOT EXISTS ( SELECT 1 FROM stock s WHERE s.product_name = sa.product_name );
这种写法逻辑更直观:找到sales表中,在stock表中找不到对应商品名称的记录,同样用DISTINCT去重。
内容的提问来源于stack exchange,提问作者Ramakanta Chandra




