0

我想按名称订购,但是应该首先列出创建者,所以我写了下面的内容并得到了错误

第一个 ORDER BY 项与结果集中的任何列都不匹配

我该怎么写才能让创建者成为第一个结果?我不明白为什么我有这个错误。我的查询是

select u.id as id, u.name as name, 0 as creator from User u 
join Moderator m on m.forumID=@forumID and m.userID=u.id 
union 
select u.id, u.name, f.creator as creator from User u 
join Forum f on f.id=@forumID and u.id=w.creator 
order by creator<>0, u.name
4

2 回答 2

3

creator您不能在WHERE,JOINORDER BY语句中使用别名。

在您的情况下使用列数:

SELECT ....
ORDER BY 3, 2

这不是一个好的做法,但它适用于你的问题......

于 2013-08-24T20:34:30.460 回答
3
select u.id as id, u.name as name, 0 as creator from User u 
join Moderator m on m.forumID=@forumID and m.userID=u.id 
union 
select u.id, u.name, f.creator from User u 
join Forum f on f.id=@forumID and u.id=w.creator 
order by creator, name

在联合中,第一个查询给出列名,后面的查询只需要返回匹配的列类型值,它们的名称并不重要。

于 2013-08-24T20:50:56.627 回答