【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表中有没有数据,之后再进行排序。
[完毕]
近期评论