我正在从表中提取一些数据。假设我的查询是这样SQL查询问题
select ename from emp where job="clerk"
这是返回重复的ename太多,但要想在他们进入。
我修改这
select distinct ename from emp where job="clerk"
我这样做是为了避免重复values.But的ename按字母顺序升序来了。但我希望按照我输入数据的顺序进行操作,因为它是在不使用不同的情况下进行的。
我正在从表中提取一些数据。假设我的查询是这样SQL查询问题
select ename from emp where job="clerk"
这是返回重复的ename太多,但要想在他们进入。
我修改这
select distinct ename from emp where job="clerk"
我这样做是为了避免重复values.But的ename按字母顺序升序来了。但我希望按照我输入数据的顺序进行操作,因为它是在不使用不同的情况下进行的。
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?
没有默认的排序顺序。即使表中有一个聚集的 索引,也不保证按该顺序得到结果。如果您需要特定订单,您必须使用order by子句 。
SQL best practice to deal with default sort order
....
您可以通过表格上的任意列进行排序,它不必位于您的select子句中 – iamkrillin
如果您不使用DISTINCT,那么可以。如果你使用不同的,你想如何通过你没有包括在你的选择中的列来订购?对于相同的不同值,可能有多个“按价值排序”。 – Jacob
抱歉,我忘记说我正在使用sqlite,当我使用不同的时候,它会按字母顺序升序排列,比如ename,A先来,B来第二,等等。我不想要任何订单。我希望数据按照它们在数据库中的存在顺序排列。 –
如果您的表已经AUTO_INCREMENT键(id),你可以试试这个:
SELECT ename FROM emp WHERE job="clerk" GROUP BY ename ORDER BY id
哪个DB您使用的?例如,在Oracle中,订单不是仅通过使用DISTINCT按字母顺序升序。 – beny23
我正在使用sqlite –