【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
还没有人抢沙发呢~