SQL查询问题

时间:2011-08-10 12:00:38

标签: sql sqlite

我从表中获取一些数据。假设我的查询是这样的

select ename from emp where job="clerk"

这也是返回重复的ename,但是按顺序返回。

我将其修改为

select distinct ename from emp where job="clerk"

我这样做是为了避免重复值。但是ename按字母顺序升序排列。但我想按照我输入数据的顺序,而不是使用不同的。

2 个答案:

答案 0 :(得分:3)

SQL表中的数据没有固有的顺序。如果您需要订单,则必须使用ORDER BY指定。如果您使用DISTINCT,则只能按您选择的列进行排序!

如果您有PK,这将是近似值:

select distinct id,ename from emp where job="clerk" order by id desc

从较早的answer开始(我知道这会有所帮助):

  

除非您指定ORDER BY,否则无法保证哪些行   将首先归还。

     

但实际上,订单通常会与聚集索引匹配   订单,并且不会因电话而异。不要依赖这种行为。

Does MySQL's LIMIT keyword guarantee order of returned data?

  

没有默认的排序顺序。即使表有集群   index,您无法保证按该顺序获得结果。您   如果您想要特定订单,必须使用order by子句。

SQL best practice to deal with default sort order

...

答案 1 :(得分:1)

如果你的表有auto_increment键(id),你可以试试这个:

SELECT ename FROM emp WHERE job="clerk" GROUP BY ename ORDER BY id