我想通过名字订购但是应该首先列出创建者,所以我写了下面的内容并得到了错误
第一个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
答案 0 :(得分:3)
您无法在creator
,WHERE
和JOIN
语句中使用别名ORDER BY
。
在您的案例中使用列数:
SELECT ....
ORDER BY 3, 2
这不是一个好习惯,但它适用于你的问题......
答案 1 :(得分: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
在联合中,第一个查询给出了列名,以下查询只需要返回匹配的列类型值,它们的名称并不重要。