2012-02-20 11 views
6

Me preguntan una pregunta en una entrevista que clasifica el resultado sin usar el orden por cláusula y sin usar el script como php. Ya llegué a google, pero no encontré el camino. ¿Hay algún método para ordenar los resultados de esta manera? Y debería ser sin el uso de ningún script como php, etc.ordena los resultados sin uso de orden por la cláusula

Respuesta

16

No se puede, al menos, no confiablemente.

Algunas implementaciones SQL también pueden devolver filas en el orden de sus claves principales o índices agrupados, pero sí SQL es un álgebra relacional que devuelve conjuntos ordenados de manera arbitraria a menos que se especifique lo contrario.

Hay muchas posibilidades de que el orden en el que se devuelven las filas dependa de la actividad de inserción y eliminación desde que se creó la tabla.

Mi respuesta a una pregunta de la entrevista así sería:

¿Hay algún tipo de razón por la que no podemos utilizar 'ORDER BY' en nuestras consultas? ¿Tan difícil es la compañía para obtener dinero que no pueden permitirse el espacio en disco para almacenar esos bytes extra para cada consulta? ¿Estás fuera de ti maldita mente ? Hazme una pregunta que va a tener cierta relevancia :-)

+4

+1: el sentimiento adecuado, pero tales frases ISN No va a impresionar al entrevistador típico. – wallyk

+0

Bueno, si realmente quieres ese trabajo, quizás deberías limitarte a usar los párrafos 1 a 3 anteriores. Yo, soy viejo y malhumorado y puedo salirme con cosas así :-) – paxdiablo

+0

bien, así que no hay forma de ordenarlo sin orden por cláusula significa una manera auténtica. Estaba explorando mi mente para una opción diferente entonces. – nbhatti2001

3

espero que estaban pescando para ver si sabía que la mayoría de las implementaciones de SQL en general no garantizan el orden de filas devueltas a menos que utilice explícitamente una orden por cláusula

2

Crear una tabla

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 

a continuación, insertar las filas

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

esta consulta ordenará los datos según 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 
Cuestiones relacionadas