我正在從表中提取一些數據。假設我的查詢是這樣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 –