2012-02-20 11 views
6

Mi viene posta una domanda nell'intervista che sortisce il risultato senza l'uso della clausola order by e senza utilizzare lo script come php. Ho abbastanza google ma non ho trovato la strada. C'è qualche metodo per ordinare i risultati in questo modo. E dovrebbe essere senza l'uso di script come php, ecc.ordinamento dei risultati senza uso di ordine per clausola

risposta

16

Non è possibile, almeno non in modo affidabile.

Alcune implementazioni SQL possono restituire righe nell'ordine delle loro chiavi primarie o indici cluster, ma SQL stesso è un'algebra relazionale che restituisce insiemi ordinatamente ordinati a meno che non sia specificato diversamente.

È probabile che l'ordine in cui vengono restituite righe dipenda dall'attività di inserimento e cancellazione dalla creazione della tabella.

La mia risposta a una questione intervista del genere sarebbe:

C'è una sorta di motivo per cui non possiamo usare 'ordine da' nelle nostre domande? L'azienda è così difficile da guadagnare denaro che non può permettersi lo spazio su disco per archiviare quei pochi byte in più per ogni query? Sei fuori di te dannazione mente? Chiedimi una domanda che sta per avere una certa rilevanza :-)

+4

+1: adeguato sentimento, ma tale isn formulazione impressionerà il tipico intervistatore. – wallyk

+0

Beh, se vuoi davvero quel lavoro, forse dovresti limitarti ad usare i paragrafi da 1 a 3 sopra. Io, sono vecchio e irascibile e posso scappare con cose del genere :-) – paxdiablo

+0

ok, quindi non c'è modo di ordinarlo senza ordine per clausola significa un modo autentico. Stava solo esplorando la mia mente per un'opzione diversa allora. – nbhatti2001

3

mi aspetto che stavano pescando per vedere se si sapeva che la maggior parte delle implementazioni di SQL, in generale, non garantiscono l'ordine delle righe restituite se non si utilizza in modo esplicito un ordine da clausola.

2

Creare una tabella

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 

poi inserire le righe

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') 

questa ricerca ordinerà i dati secondo 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 
Problemi correlati