¿Hay alguna razón por la cual o por qué no debería hacer un 'pedido por' en una subconsulta?Se permite la orden por cláusula en una subconsulta
Respuesta
Sí: No debe hacerse, porque no tiene sentido conceptualmente.
La subconsulta se utilizará en algunas consultas externas (de lo contrario, no tendría sentido), y esa consulta externa tendrá que hacer el pedido de todos modos, por lo que no tiene sentido pedir la subconsulta.
Esto se debe a que los resultados de la consulta en SQL no vendrán en ningún orden particular, a menos que use un ORDEN explícito. Por lo tanto, incluso si utilizó ORDER en la subconsulta, no tiene garantía de que esto afecte el orden de los resultados de la consulta externa; así que no tiene sentido.
Por supuesto, puede hacer una diferencia en algunos RDBMS específicos debido a su implementación, pero eso será específico de la implementación, y no es algo en lo que deba confiar.
Editar: Por supuesto, si se utiliza TOP o limitar en la subconsulta, que se necesidad de utilizar el orden. Pero eso no es SQL estándar de todos modos ...
Debe usarlo si la subconsulta usa algún tipo de LIMIT
/TOP
.
SQL Server
no lo permite a menos que la subconsulta contiene cláusula TOP
o FOR XML
así:
-- Fails
WITH q(id) AS
(
SELECT 1
UNION ALL
SELECT 2
)
SELECT *
FROM (
SELECT *
FROM q
ORDER BY
id DESC
) q2
-- Succeeds
WITH q(id) AS
(
SELECT 1
UNION ALL
SELECT 2
)
SELECT *
FROM (
SELECT TOP 1 *
FROM q
ORDER BY
id DESC
) q2
-- Succeeds, but ORDER BY is ignored
WITH q(id) AS
(
SELECT 1
UNION ALL
SELECT 2
)
SELECT *
FROM (
SELECT TOP 100 PERCENT *
FROM q
ORDER BY
id DESC
) q2
usted puede hacerlo, pero no me lo general menos que tenga una necesidad.
El optimizador ignorará (o lanzar un error?)
Ver "Intermediate materialisation" para algunos usos.
Dependiendo del tamaño de la subconsulta, afectará el rendimiento a un grado de variación.
Sin embargo, el orden no debería importar en una sub consulta. Debería poder mover la porción Ordenar Por a la Consulta Externa (que debería ser la que devuelve los resultados finales).
Es totalmente legítimo. Es decir. SELECT id FROM entries WHERE author_id IN (SELECT id FROM authors ORDER BY name DESC)
pero realmente obtendrás los mismos resultados por lo general.
A menos que utilice la parte superior no es útil ya que va ordenando en la consulta externa de todos modos
Sin ORDER BY es válido en una sub consulta cuando usted está interesado en un subconjunto de los datos globales, por lo tanto, siempre es necesario a TOP
(SQL Server). No tiene sentido tener un ORDER BY sin TOP en una subconsulta porque el pedido general de los resultados es manejado por la consulta externa.
No debe usarlo. De acuerdo con el 'Arte de SQL', esto realmente impide que el optimizador realice varias optimizaciones que de otro modo podría hacer porque esto transforma los datos prematuramente.
La gente más inteligente dice que no es la forma correcta/válida para hacerlo. En mi caso SELECT TOP 100 PERCENT en la subconsulta resolvió el problema.
Cheers
- 1. SQLAlchemy: subconsulta en una cláusula WHERE
- 2. APP/hibernación subconsulta en la cláusula de
- 3. Ordenamiento personalizado en orden SQL por cláusula?
- 4. subconsulta correlacionada SQL en una cláusula de caso
- 5. Manejar la inyección SQL en orden HQL por la cláusula
- 6. El uso de la expresión booleana en orden por cláusula
- 7. "índice agrupado" y "orden por cláusula"
- 8. Orden de TSQL complejo por cláusula
- 9. Cláusula ORDER BY de SQL Server en la subconsulta
- 10. Oracle SQL orden por en problemas de subconsulta!
- 11. subconsulta en la cláusula select con API JPA Criterios
- 12. ordena los resultados sin uso de orden por la cláusula
- 13. Ejemplo de una cláusula Oracle PIVOT con subconsulta
- 14. Dar prioridad al orden por más de una POR GRUPO en MySQL sin subconsulta
- 15. cómo escribir una subconsulta y usar la cláusula "En" en Hive
- 16. ¿Cómo hacer una subconsulta de Postgresql en la cláusula de selección con la cláusula join in from como SQL Server?
- 17. Cierre SqlAlchemy en la subconsulta
- 18. El SELECT de la vista contiene una subconsulta en la cláusula FROM
- 19. ¿Las subconsultas están almacenadas en caché por MySQL cuando se utilizan en una cláusula WHERE?
- 20. Ordenar por orden de valores en una cláusula de selección "in" en mysql
- 21. Uso de la unión y la orden por cláusula en mysql
- 22. ¿Importa el orden de las columnas en una cláusula WHERE?
- 23. Rendimiento de consulta WHERE cláusula contiene IN (subconsulta)
- 24. ¿Por qué EF genera una subconsulta para una consulta simle?
- 25. PLSQL Insert into con subconsulta y cláusula de regresar (Oracle)
- 26. subconsulta en LINQ que está en la instrucción de selección, no la cláusula where
- 27. Subconsulta de LINQ EN
- 28. ¿Por qué se permite T() = T()?
- 29. ¿Por qué no se permite System.out.println (super)?
- 30. Esquema XSD que permite el orden aleatorio
¿Normalmente? ¿Puedes dar cualquier caso en el que los resultados difieran? – sleske
Diferirá si agrega una instrucción LIMIT a su subselección. En este caso, si desea ver todas las entradas de los 5 autores principales por nombre, debe cambiar su subselección a (SELECCIONAR ID FROM autores ORDER BY nombre DESC LIMIT 5). – loginx
Es cierto. Con TOP/LIMIT hace una diferencia (y es necesario, a veces incluso requerido). De lo contrario, no hace la diferencia. – sleske