我有一张桌子看起来像这样
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')
答案 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
您可以使用适当的实用程序表来代替带有联合的子查询