Trucos Transact-SQL - Eliminación de consultas anidadas

4 - Eliminación de consultas anidadas

[editar]
Tutorial creado por Mononeurona. Extraido de: http://www.mononeurona.org/index.php?idp=541
27 de Octubre de 2005
Las consultas sobre una tabla que tienen una condición sobre una columna de otra tabla relacionada tienen siempre la misma forma: por ejemplo, buscar todas las operaciones cuyos movimientos fueron devengados antes de una fecha dada. En vez de escribir:

select * from A where (select s from B where B.a = A.a and max(B.s) < N)

dar vuelta el join y escribir:

select A.a from A, B
where A.a = B.a
group by B.a
having A.a = B.a and max(B.s) < N

La idea es fijarse en los grupos en B de acuerdo a la clave foránea, y seleccionar o no un grupo completo de acuerdo a si el máximo valor en s es menor al dado. Notar cómo la condición del join se repite en el having.

Esto es más rápido porque, como mínimo, no crea una tabla de trabajo para guardar el select anidado (que de todas maneras es un join).

C.J.Date tiene una excelente y detallada (¡y crítica!) de esta transformación.
[editar]

10 opiniones

Agradecimiento.

Interesante eh.
Como hacer los programas.

Todo los programas de sql con todo los programas de php,asp. Deben de ser mas complejas.
Buenisimo.

Felicito a los aportadores de este articulo, pero de igual manera me encantaria que lo ampliasen.
Aprendiendo trasact-sql.

Gracias

por favor quiero encontrar un libro o un tutorial de todo el lenguaje transat-sql

podria por favor colaborarme.
Genial.

Yo había construido una función para agrupar por horas, pero esto es mucho mejor, ya que los cálculos son rapidísimos. Gracias por la idea.
1 2 | siguiente >

Tutoriales relacionados con 'Trucos Transact-SQL'

Varios de los ejemplos aquí presentados usan tablas ''abstractas'' A y B. Las definiciones son:... Más »

Autor y licencia de 'Trucos Transact-SQL'


Tutorial de Mononeurona. Extraido de: http://www.mononeurona.org/index.php?idp=541 CopyLeft
Este trabajo está licenciado bajo la Creative Commons License. 1999-2005 © :: MonoNeurona.org ::
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.