有一个表table(id,name),里面有数据{(1,aa_1),(2,xx_1),(3,zz_1),(4,xx_2)},现在要按字段name来排序,但又要把所有的xx的先排在前面,用升序。前高手们指点一二。

解决方案 »

  1.   

    现我在只能在应用程序里面处理,先是查带有xx的数据,然后跟别的连接起来,先是select name from table where left(name,2)='xx' order by name 查出来的结果放在一个ArrayList里面(我是用java来写的),再用select name from table where left(name,2)<>'xx' order by name放在别一个ArrayList里面,然后用两个ArrayList连接起来,但我觉得这样太麻烦了,请问一下高手们有没有能用一句sql语句能实现这个功能。
      

  2.   

    select name from table where left(name,2)='xx' order by name
    union
    select name from table where left(name,2)<>'xx' order by name哈哈
      

  3.   

    yangxiao_jiang(哈哈) ,mysql 语法不支持select name from table where left(name,2)='xx' order by name
    union
    select name from table where left(name,2)<>'xx' order by name
    但如果写成:select name from table where left(name,2)='xx' 
    union
    select name from table where left(name,2)<>'xx' order by name
    那又跟select name from table order by name 没什么两样。有更好的办法吗?
      

  4.   

    用(select name from table where left(name,2)='xx' order by name) union (select name from table where left(name,2)<>'xx' order by name)是可以查的,但排序失效,最后的结果虽然带xx的在前面,但并没有按name排序,两部分都是按id字段来排的。
      

  5.   

    select * 
    from 表名 
    order by case when left(name,2)='xx' then 1 else 2 end, name
      

  6.   

    wangtiecheng(不知不为过,不学就是错!) ,谢谢,问题已解决,果然高手。