我创建了以下查询:
select * from store str
left join(
select * from schedule sdl
where day = 3
order by
case when sdl.store_id is null then (
case when sdl.strong is true then 0 else 2 end
) else 1 end, sdl.schedule_id desc
) ovr on (ovr.store_id = str.store_id OR ovr.store_id IS NULL)
样本数据:
STORE
[store_id] [title]
20010 Shoes-Shop
20330 Candy-Shop
[SCHEDULE]
[schedule_id] [store_id] [day] [strong] [some_other_data]
1 20330 3 f 10% Discount
2 NULL 3 t 0% Discount
我想从中获得的LEFT JOIN
是 NULL store_id 的数据(全局计划条目 - 影响所有商店条目)或给定 store_id 的实际数据。
像这样加入查询,返回具有正确顺序的结果,但对于 NULL 和 store_id 匹配。在 join 子句上使用 OR 语句是有意义的。
预期成绩:
[store_id] [title] [some_other_data]
20010 Shoes-Shop 0% Discount
20330 Candy-Shop 0% Discount
当前结果:
[store_id] [title] [some_other_data]
20010 Shoes-Shop 0% Discount
20330 Candy-Shop 0% Discount
20330 Candy-Shop 10% Discount
如果在这个主题上有更优雅的方法,我会很高兴遵循它。