order by 和 union all

order by 和 union all

业务要求是:

卖家查询车辆信息时,自己的发布的车辆信息排在列表前面,按时间降序,不受地区限制

不是自己的发布的车辆信息,排在后面,也按时间降序,但是受地区限制

就是sql中的  INSTR(isi.AREA_NAME ,?) > 0

我把上下两段相同的字段和相同的where条件删了,因为这个sql太TM长了。

slq:

SELECT * FROM

    (SELECT

            format(isi.cost_price / 10000, 2) costPrice,

            format(isi.price / 10000, 2) price

        FROM

            item_source_info isi

        WHERE

            isi.member_id = ?

        ORDER BY

            isi.creation_Date DESC

    ) AS t1

UNION ALL

SELECT * FROM

    (SELECT

                'XX.XX' costPrice,

                'XX.XX' price

            FROM

                item_source_info isi

            WHERE

                isi.member_id <> ?

            AND INSTR(isi.AREA_NAME ,?) > 0

            ORDER BY

                isi.creation_date DESC

        ) AS t2

这个sql,我可是弄了一上午呀。。。

错误用法有很多,我们只说正确用法

注:A,B是正常查询sql  ,O1,O2是排序规则,t1,t2是别名。

为了方便书写和表达;令     A = 

                                             SELECT

                                                    format(isi.cost_price / 10000, 2) costPrice,

                                                    format(isi.price / 10000, 2) price

                                             FROM

                                                    item_source_info isi

                                              WHERE

                                                    isi.member_id = ?

                                        B =                                                

                                             SELECT

                                                   'XX.XX' costPrice,

                                                   'XX.XX' price

                                              FROM

                                                   item_source_info isi

                                              WHERE

                                                    isi.member_id <> ?

                                              AND INSTR(isi.AREA_NAME ,?) > 0

 

                                        O1 = O2 =  isi.creation_date DESC

 

正确用法1:

SELECT * FROM (A ORDER BY O1)AS t1

UNION ALL

SELECT * FROM (B ORDER BY O2)AS t2

正确用法2:

A

UNION ALL

SELECT * FROM (B ORDER BY O2)AS t2

正确用法3:

SELECT * FROM (A ORDER BY O1)AS t1

UNION ALL

B

正确用法2和3是该段不排序.

 

总结:正确用法1,2和3,都有一个共同特点,在使用order by和union all或者是union时,

先取出数据将其放在一个临时表中,这个表就是我们取的别名t1,t2然后再进行union all的操作。

转载于:https://my.oschina.net/hsl520/blog/743243

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值