【SQL】非NULL数据排序提前



    源于一个遇到的实际问题,抽象一下,表述问题如下:

    有两张表main和attachment,其中attachment表的mianid字段对应到main表的mainid字段,如下

    main表

    mainid submittime
    1 2010-1-3
    2 2010-1-5
    3 2010-1-7


    attachment表

    mainid attachments
    1 a.gif
    3 b.jpg

    要求查询结果返回两表连接后的所有字段,且attachment表中有数据的项靠前,之后按submittime升序排序,即希望得到如下结果:

    mainid submittime attachments
    1 2010-1-3 a.gif
    3 2010-1-7 b.jpg
    2 2010-1-5 NULL

    解决以上问题的SQL语句是:

    SELECT *, (b.attachments IS NULL) as flag FROM main a LEFT JOIN attachments b ON a.mainid=b.mainid order by flag, a.submittime

    说明:连接两表后,用IS NULL来生成了新列flag来表示main表中的项在attachment表中有没有数据,之后再进行排序。

    [完毕]



    本博客所有文章如无特别注明均为原创。
    复制或转载请以超链接形式注明转自枫芸志,原文地址《【SQL】非NULL数据排序提前
    标签:
    分享:

还没有人抢沙发呢~

无觅相关文章插件,快速提升流量