我需要检索按字母顺序排序的所有记录。 除之外,对于预定义的记录列列表,其记录应首先按给定的预定义顺序显示,则所有其他记录应按字母顺序排列,基于同一列
例如,假设我们有下表,称为Names
假设预定义列表为("Mathew", "Ashraf", "Jack")
。
即这些是他们的记录应首先按预定顺序列出的名称。
因此所需的查询结果应为:
哪个查询可以检索此自定义订单?
P.S,我正在使用MySQL。
这是根据评论请求进行的试用:
(SELECT * FROM Names WHERE Name in ('Mathew', 'Ashraf', 'Jack'))
UNION
(SELECT * FROM Names WHERE Name NOT IN ('Mathew', 'Ashraf', 'Jack') ORDER BY Name ASC);
第一个查询结果未按要求排序。
答案 0 :(得分:2)
如果你想要Mathew,Ashraf和Jack在内部订购,你可以使用类似的东西:
select id, name, case name when 'Mathew' then 1
when 'Ashraf' then 2
when 'Jack' then 3
else 4
end as x
from T
order by x, name
如果首先排序的是谁并不重要:
select id, name, case when name in ('Mathew', 'Ashraf', 'Jack')
then 0 else 1
end as x
from T
order by x, name
答案 1 :(得分:2)
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,name VARCHAR(12) NOT NULL UNIQUE
);
INSERT INTO my_table (name) VALUES
('Sam'),
('John'),
('Samanta'),
('Johny'),
('Ashraf'),
('Tom'),
('Jack'),
('Mathew'),
('Hans'),
('Adam');
SELECT * FROM my_table ORDER BY FIELD(name,'Jack','Ashraf','Mathew') DESC,name;
+----+---------+
| id | name |
+----+---------+
| 8 | Mathew |
| 5 | Ashraf |
| 7 | Jack |
| 10 | Adam |
| 9 | Hans |
| 2 | John |
| 4 | Johny |
| 1 | Sam |
| 3 | Samanta |
| 6 | Tom |
+----+---------+
你甚至可以使用FIND_IN_SET ...
SELECT * FROM my_table ORDER BY FIND_IN_SET(name,'Jack,Ashraf,Mathew') DESC,name;