【发布时间】:2015-08-16 11:18:08
【问题描述】:
我想首先获取特定位置的所有配置文件:
SELECT * FROM profile
WHERE location IN ('a', 'b', 'c') OR isDefault=1
ORDER BY location IN ('a', 'b') DESC, -- put to the front if location in 'a','b'
isDefault DESC, -- for each of both groups, put default profiles before the others.
location ASC -- and sort each of the up to four groups by location.
这会引发错误:“关键字 'IN' 附近的语法不正确。”。如果我删除 order 子句,则返回结果。
这里有什么问题?
【问题讨论】:
-
您的请求可能存在的问题是,除了
IN不允许在ORDER BY中这一事实之外,您选择的位置不会有内部排序“在正面”。这真的是你想要的吗? a 和 b 会排在最前面,但可能是 b 和 a。 -
@Mackan
location ASC会对它们进行排序,所以 a 总是在 b 前面(如果两者的 isDefault 相同),甚至如果我查询ORDER BY location IN('b', 'a'),并且这完全是故意的。 -
没错,我不知道我在想什么——但我的想法完全有道理;-)
标签: sql sql-server