2012-02-20 18 views
6

Zostałem poproszony o pytanie w wyniku tego sortowania bez użycia klauzuli order by i bez użycia skryptu jak php. Wystarczająco google, ale nie znalazłem sposobu. Czy istnieje metoda sortowania wyników w ten sposób? I powinno być bez użycia jakiegokolwiek skryptu, jak php itp.posortuj wyniki bez użycia polecenia klauzula

Odpowiedz

16

Nie możesz, przynajmniej nie niezawodnie.

SQL Niektóre implementacje może również zwrócić wiersze w kolejności ich podstawowych klawiszy skupionych indeksów, ale sam SQL to relacyjną Algebra która zwraca dowolnie zbiorów uporządkowanych ile wyraźnie nie powiedziano inaczej.

Istnieje duża szansa, że ​​kolejność zwracania wierszy może zależeć od czynności wstawiania i usuwania, ponieważ tabela została utworzona.

Moja odpowiedź na pytanie wywiad do takiego byłoby:

Czy istnieje jakiś powód, dla którego nie możemy wykorzystać „zamówienie” na nasze pytania? Czy firma jest tak bardzo obciążona pieniędzmi, że nie mogą sobie pozwolić na miejsce na dysku, aby przechowywać te dodatkowe kilka bajtów dla każdego zapytania? Czy jesteś z tobą cholernie umysłu? Zadaj mi pytanie, które będzie mieć pewne znaczenie :-)

+4

+1: prawidłowego nastrojów, ale takie sformułowanie ISN Zamierzam zrobić wrażenie na typowym ankiecie. – wallyk

+0

Cóż, jeśli naprawdę chcesz tę pracę, być może powinieneś ograniczyć się do używania paragrafów od 1 do 3 powyżej. Ja, jestem stary i kłótliwy i mogę uciec z takimi rzeczami :-) – paxdiablo

+0

ok, więc nie ma sposobu, aby posortować bez porządku klauzula oznacza autentyczny sposób. Po prostu eksplorował mój umysł w poszukiwaniu innej opcji. – nbhatti2001

3

Spodziewam oni łowili ryby, aby zobaczyć, jeśli wiedział, że większość implementacji SQL w ogóle nie gwarantują kolejność zwracanych wierszy, chyba że jawnie użyć zamówienie według klauzuli.

2

Utwórz tabelę

USE [Test] 
GO 
/****** Object: Table [dbo].[Test_order] Script Date: 06/05/2013 10:21:16 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[Test_order](
    [TID] [int] IDENTITY(1,1) NOT NULL, 
    [RID] [int] NULL, 
    [Name] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL 
) ON [PRIMARY] 

GO 
SET ANSI_PADDING OFF 

następnie wstawić wierszy

insert into dbo.Test_order values(1,'Test1') 
insert into dbo.Test_order values(3,'Test3') 
insert into dbo.Test_order values(2,'Test2') 
insert into dbo.Test_order values(5,'Test5') 
insert into dbo.Test_order values(6,'Test6') 
insert into dbo.Test_order values(4,'Test4') 
insert into dbo.Test_order values(9,'Test9') 
insert into dbo.Test_order values(7,'Test7') 
insert into dbo.Test_order values(8,'Test8') 

tego zapytania będzie zamówić dane zgodnie z RID

select distinct b.TID,b.RID,b.[Name] 
from dbo.Test_order as a,dbo.Test_order as b 
where a.RID>=b.RID 
Powiązane problemy