MySQL按某些值排序,即使表中不存在

时间:2019-07-13 16:23:08

标签: mysql

我有一张桌子看起来像这样

 id         name
-----      ------
1          Mark
2          Mike
3          John
4          Mike
5          Mike
6          John
7          Mark

请注意,表中没有Paul的名字,所以在按名称订购时,我希望它是这样的('Mark','Paul','Mike','John')

        id         name
       -----      ------
        1          Mark
        7          Mark
       Null        Paul
        2          Mike
        4          Mike
        5          Mike
        3          John
        6          John

我已经尝试过field方法,并且因为它不在表中而正在删除Paul

ORDER BY Field(name, 'Mark', 'Paul', 'Mike','John')

1 个答案:

答案 0 :(得分:3)

您不能按不存在的值进行排序,因此应添加一组适当的数据进行排序

select a.id, t.name 
from (
   select 'Mark' name, 1 my_order 
   union 
   select  'Paul', 2 
   union  
   select 'Mike', 3 
   union  
   select 'John', 4 ) t 
 left join my_table a   on a.name = t.name  
 order by t.my_order

您可以使用适当的实用程序表来代替带有联合的子查询