2010-07-16 11 views
9

¿Podemos tener múltiples nombres de alias para una sola tabla?Nombres de Alias ​​Múltiples para una tabla

+0

¿Por qué querrías? ¿Tiene una consulta específica que no funciona? –

+0

para lo que necesita eso? –

+1

Uniones automáticas o tablas que viven en múltiples roles. Un ejemplo de esto último podría ser una tabla de dimensión de fecha que se una a una tabla de hechos con varias fechas. – ConcernedOfTunbridgeWells

Respuesta

11

Sí. Es necesario hacer esto para un self join, por ejemplo, f tiene una tabla que almacena una jerarquía:

create table Foo (
    FooID int 
    ,ParentFooID int 
    ,[columns] 
) 

Usted puede hacer una combinación para obtener los hijos de padres que satisfacen una condición particular con una consulta como:

Select b.* 
    from Foo a 
    join Foo b 
    on a.FooID = b.ParentFooID 
    and [some condition filtering a] 
+1

+1 para poderes de inferencia! –

+0

Pero afectará el rendimiento o no? –

+0

El optimizador de consultas tendrá que hacer lo que sea necesario para resolver el predicado de unión. Por ejemplo, si la tabla es grande y tiene un índice en ParentFooID, probablemente tendrá que hacer búsquedas de índice para resolver la unión FooID - ParentFooID. Hacer el partido siempre implicará algunos recursos. – ConcernedOfTunbridgeWells

3

No, no en la misma tabla, pero puede seleccionar la misma tabla dos veces y darle a cada una un alias diferente.

SELECT alias1.*, alias2.* 
FROM mytable alias1, mytable alias2 

Esto le permitirá utilizar la misma tabla para un propósito diferente en una sola consulta.

+0

Pero afectará el rendimiento o no? –

+0

Sí, si selecciona la tabla dos veces, tendrá que hacer el doble de trabajo. El rendimiento dependerá de cómo se usan, a qué se unen dos y los índices y estadísticas disponibles para el optimizador de consultas. –

+0

Dado que la consulta de Chris no tiene condición de combinación (implícita o explicita), se esperaría una unión cartesiana, es decir. cada fila de la tabla se vinculará con todas las filas en la misma tabla, por lo que si tuviera 20 filas en la tabla, ¡su resultado sería 400 filas! Esto es mucho peor que duplicar el trabajo. Sin embargo, no son los alias los que están causando el trabajo, es la unión cartesiana. –

Cuestiones relacionadas