一张商品表(主表) item
一张商品库存表(关联表) item_stock
商品表对应多个商品库存表,现有一个关于商品列表的查询SQL,要求库存为0的商品排列在最后显示(库存表里面有商品的itemId字段),其他的原先排序逻辑不改变
看看是不是这样, 有库存的按item表排序在前面, 没库存的在后面
原始测试数据
select * ,( select count(*) from item_stock as is2 where is2.itemid = i.id ) as sum
from item as i
join item_stock as is on i.id = is.itemid
group by i.id
order by sum desc
item_stock表别称换一个,is是保留字符
如果我只想使用商品实体接收SQL返回的对象呢? 即查询的结果映射 Item实体,仅仅映射Item实体
@Mr_伍先生: 那就不关联查询啊,只查库存表就行了
select * ,( select count(*) from item_stock as i2 where i2.itemid = i.itemid ) as sum
from item_stock as i
group by i.itemid
order by sum desc
@阅尽三千: 库存表没有我想要的商品信息
select distinct a, b,c from item left join itemstock on item.id = itemstock.itemid
where itemstock.id is not null order by somthing
union
select distinct a,b,c from item left join itemstock on item.id = itemstock.itemid
where itemstock.id is null order by something
大概看了一下你的SQL的意思,先查询库存不是0的商品,按照原有的规则进行排序
再查询库存是0的商品,按照原有的规则进行排序,
问题是如果一个商品Item有多个sku每个都对应有库存信息,那么就是一个商品会出现多次,可能不太
符合我的业务场景
@Mr_伍先生: sku是什么?我加了distinct 啊
@会长: 对,你说的对,这种思路不失为解决问题的办法之一