Mysql: ¿Cómo puedo nombrar una subselección en una combinación para evitar unir subselecciones idénticas?

Tengo una consulta como:

select * from (select ... ) t1 join (select ... ) t2 on t1._ = t2._

donde las subselecciones de unión son idénticas. ¿Existe una manera fácil de nombrar esta selección para que pueda usarla en ambas ocasiones? Intenté esto:

select * from (select ... ) t1 join t1 t2 on t1._ = t2._

pero dio un error. ¿Algunas ideas?

preguntado el 09 de enero de 11 a las 03:01

2 Respuestas

Si el costo de adquirir las filas en su subselección es significativo, puede considerar almacenar el resultado intermedio en una tabla temporal y luego hacer referencia a eso dos veces en su selección. Pero es mejor que midas esto, porque también cuesta almacenar el resultado intermedio ...

¿Puedes compartir tu consulta? ¿Quizás no necesite hacer referencia a él dos veces después de todo?

Respondido el 09 de enero de 11 a las 11:01

Cada una de las subselecciones estaba haciendo una combinación, por lo que en realidad solo la factoricé en una serie de combinaciones. En última instancia, no tengo que hacer referencia a él dos veces, gracias por el liderazgo; ) - prisma de todo

  CREATE VIEW MyCommonSelect (Col1, Col2. . .) AS
      SELECT Col1, Col2. . . 

Dependiendo de cómo se vea exactamente su consulta, es posible que pueda nombrar las subconsultas internamente, pero algo como esto tiende a indicar que la subconsulta representa la lógica de la base de datos que (en mi opinión, otros no están de acuerdo) merece su propio nombre.

Respondido el 09 de enero de 11 a las 06:01

Tenga en cuenta que esto solo escribiendo a la consulta; no hay valor de rendimiento porque las referencias de vista se ejecutarán independientemente unas de otras (no cambia si se usa un CTE, si fuera compatible). Una vista es solo una macro para la consulta ... - Ponis dios mio

Definitivamente. No se me ocurrió que el OP estaba buscando una optimización de velocidad. De hecho, es posible que (según la vista y el producto utilizado) que interponer una vista pueda causar una disminución en el rendimiento. - Larry Lustig

Sí, de hecho lo hago por motivos de rendimiento. ¿Es esta la única opción, solo necesito ejecutar la selección dos veces? - prisma de todo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.