左连接多表后基于不同表的两列实现ORDER BY排序
解决双价格字段综合排序的问题
没问题,我来帮你搞定这个排序需求!核心思路很简单:排序时优先用促销价(promotionalPrice),如果设备没有促销价(也就是这个字段为NULL),就回退使用日常价格(priceperday)。
具体SQL实现
用标准SQL的COALESCE()函数就能轻松实现这个逻辑,它会返回传入参数里第一个非空的值,完美适配我们的需求。完整的查询语句如下:
SELECT t1.gadgetid, t1.priceperday, t2.promotionalPrice FROM tbl1 t1 LEFT JOIN tbl2 t2 ON t1.gadgetid = t2.gadgetID ORDER BY COALESCE(t2.promotionalPrice, t1.priceperday) ASC;
语句说明
LEFT JOIN保证了tbl1里的所有设备都会被查询到,哪怕没有对应的促销记录COALESCE(t2.promotionalPrice, t1.priceperday):如果promotionalPrice有有效值,就用它来排序;如果该字段为NULL(无促销),就自动用priceperday的值替代- 结尾的
ASC是升序排序(价格从低到高),如果需要从高到低排,改成DESC就行
示例结果验证
拿你给出的示例数据来说,排序后的结果会是:
| gadgetid | priceperday | promotionalPrice |
|---|---|---|
| 23 | 24 | 6 |
| 24 | 21 | 8 |
| 1 | 32 | 9 |
| 30 | 26 | 11 |
| 21 | 30 | NULL |
| 32 | 11 | NULL |
这样就完全符合你要的“两列综合排序”的要求啦!
内容的提问来源于stack exchange,提问作者Aneeq Azam Khan
相关产品推荐
相关产品推荐

