2010-11-01 26 views
15

Estoy poniendo inner join en mi consulta.Tengo el resultado pero no sabía cómo los datos vienen en salida. ¿Puede alguien decirme cómo la unión interna que coincide con los datos.Beneficio Estoy mostrando una imagen. Hay dos tablas (una o dos).Ordenar por Inner Join

alt text

Según yo esa primera fila debe ser Mohit pero el caudal es different.Please dime.

Gracias de antemano.

Respuesta

3

hay que ordenar si desea que los datos que regresan de una manera determinada. Cuando dice que espera que "Mohit" sea la primera fila, supongo que lo dice porque "Mohit" es la primera fila en la tabla [One]. Sin embargo, cuando SQL Server se une a las tablas, no se une necesariamente en el orden que usted piensa.

Si desea que se devuelva la primera fila de [One], intente ordenar por [One].[ID]. Alternativamente, puede order by cualquier otra columna.

+0

Gracias por la respuesta.Sé información sobre cómo realizar un pedido de Pero quiero saber cómo funciona la unión interna internamente? –

+0

Cuando hace un INNER JOIN, SQL Server determina la mejor manera de encontrar las filas correspondientes (bucles anidados, etc.). Esto da como resultado un orden aleatorio de los resultados. – dotariel

+2

¿Alguien sabe si puedo forzar (especialmente para SQLite) a que se "ordene" la unión? –

3

Agregue ORDER BY ONE.ID ASC al final de su primera consulta.

Por defecto no hay pedidos.

+0

pero al seleccionar los registros de la tabla ese tiempo Default order by es "ASC" – Vijjendra

+0

Gracias por la respuesta.Ya sé ordenar por Pero quiero saber cómo funciona la unión interna internamente? –

+0

@Mohit - No hay un orden natural una vez que hagas el 'JOIN '. Los resultados que obtuvo fueron correctos, pero desordenados. Su única tabla 'SELECT' está en el orden en que probablemente se debe a un índice agrupado. – JNK

9

En SQL, el orden de la salida no está definido a menos que lo especifique en la cláusula ORDER BY.

Prueba esto:

SELECT * 
FROM one 
JOIN two 
ON  one.one_name = two.one_name 
ORDER BY 
     one.id 
+0

+1: con una cláusula 'ORDER BY', es poco probable que el orden sea aleatorio y es probable que sea predecible (dada la información suficiente) pero el punto es" la salida no está definida ". – onedaywhen

+0

Gracias por la respuesta.Sé información sobre cómo realizar un pedido por, pero quiero saber cómo funciona la unión interna internamente? –

+0

Cree el plan para su consulta (solo presione 'Ctrl-L' en la ventana de consulta), le mostrará el algoritmo. – Quassnoi

1

SQL no devuelve ningún pedido de forma predeterminada porque es más rápido de esta manera. No tiene que pasar primero por sus datos y luego decidir qué hacer.

Necesita agregar una orden por cláusula, y probablemente ordene por cada ID que espere. (Hay un duplicado de nombres, por lo tanto me gustaría suponer que desea One.ID)

select * From one 
inner join two 
ON one.one_name = two.one_name 
ORDER BY one.ID 
4

Evitar SELECT * en su consulta principal.

Evita columnas duplicadas: la condición JOIN asegura One.One_Name y two.One_Name será igual, por tanto, no es necesario volver tanto en la cláusula SELECT.

Evite los nombres de columna duplicados: cambie el nombre a One.ID y Two.ID usando 'alias'.

Agregue una cláusula ORDER BY usando los nombres de columna ('alises' donde corresponda) de la cláusula SELECT.

Se sugiere la re-escritura:

SELECT T1.ID AS One_ID, T1.One_Name, 
     T2.ID AS Two_ID, T2.Two_name 
    FROM One AS T1 
     INNER JOIN two AS T2 
      ON T1.One_Name = T2.One_Name 
ORDER 
    BY One_ID; 
-1

Sí Mohit smirkingman es correcto. Incluso si usa la cláusula Order by sin especificar el orden como asssending o dessending huge database le da ansewers impredecibles