Mysql SQL错误ORDER BY子句不起作用

Mysql SQL错误ORDER BY子句不起作用,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,ORDERBY子句不使用Union,别名(as)出现错误 信使表 mid senderid receiverid message --------------------------------------- 4 100 200 hi 3 200 100 hello 2 100 200

ORDERBY子句不使用Union,别名(as)出现错误

信使表

       mid    senderid   receiverid   message   
      ---------------------------------------
        4       100       200          hi
        3       200       100          hello
        2       100       200          hi
        1       100       200          hi
选择语句

  select senderid as new_id from messenger  where  receiverid=200
  union 
  select  receiverid from messenger  where  senderid =200
  order by mid  desc
错误

   #1054 - Unknown column 'mid' in 'order clause'

我不知道我犯了什么错误,请帮助我提前感谢你的联合结果,你没有中间栏
您只有
新的\u id
你应该加上

select mid, senderid as new_id 
from messenger  where  receiverid=200
union 
select mid, receiverid 
from messenger  where  senderid =200
order by mid  desc
或者避免仅使用单个查询进行联合

select case when senderid = 200 then reciverid else senderid as new_id 
from messenger  
where  receiverid=200 or senderid = 200
order by mid

您的联合查询中没有中间字段,所以要么使用中间字段

 select senderid as new_id from messenger  where  receiverid=200
  union 
  select  receiverid as new_id from messenger  where  senderid =200
  order by new_id  desc


您为什么要使用
联合

select (case when receiverid = 200 then senderid else receiverid end) as new_id
from messenger m
where 200 in (receiverid, senderid)
group by new_id
order by min(mid) desc;

当UNION时,仅可按顺序使用select列表项。(改为使用UNION ALL。)Mid是一个列,而不是一个字段。@jarlh只是不同的术语,field=column,record=rowWell,不符合ISO/ANSI SQL规范。(可能与Excel文档中的一样?)先生,它可以工作,但我如何使用distinct来忽略多个值的帮助me@CforCODE . . . 我很惊讶你接受了这个答案。你的问题意味着你想要一列而不是两列。更重要的是,这不会删除重复项。@scaisEdge是的,我知道并解决了我的问题,谢谢again@scaisEdge先生,请帮我解决这个问题
select (case when receiverid = 200 then senderid else receiverid end) as new_id
from messenger m
where 200 in (receiverid, senderid)
group by new_id
order by min(mid) desc;