我有一个像下面这个查询的查询。
SELECT name, id, note_date, note
FROM example
ORDER BY name, note_date
假设我有一个名为" John Smith"的用户。我希望查询按原样工作,除了我希望John Smith的所有条目都违反订单并显示在列表的顶部。
我只是想知道除了JOIN之外是否还有更简单或更正确的方法(如下所示)。
此外,如果重要的话,约翰史密斯"在任何特定时间可能有也可能没有参赛作品。
谢谢!
像:
SELECT name, id, note_date, note
FROM example
WHERE name = "John Smith"
ORDER BY note_date
JOIN
SELECT name, id, note_date, note
FROM example
WHERE name != "John Smith"
ORDER BY name, note_date
答案 0 :(得分:2)
SELECT name,
id,
note_date,
note,
CASE
WHEN name= 'John Smith'
THEN 0
ELSE 1
END AS OrderStatement
FROM example
ORDER BY OrderStatement, name, note_date
您只需创建一个列来生成自定义顺序,并将其与ORDER BY子句一起用于其他列。
答案 1 :(得分:0)
您可以使用
然后
的情况
这样的我们
select id, etc, etc
case users.name
when ‘John Smith’ then ORDER BY etc
when 'X' then ORDER BY etc
end
from`users`
注意vorgoles,这些不对,但我在手机上并且没有正确的那些
答案 2 :(得分:0)
一种方法是使用UNION:
(SELECT name, id, note_date, note
FROM example
WHERE name = "John Smith"
ORDER BY note_date)
UNION
(SELECT name, id, note_date, note
FROM example
WHERE name != "John Smith"
ORDER BY name, note_date)
另一种更简洁的方法是使用CASE运算符:
SELECT name, id, note_date, note, CASE WHEN name='John Smith' THEN 1 ELSE 2 END as rank
FROM example
ORDER BY rank, name, note_date