mysql - tecnicas - terapia familiar estrategica
UNION despues de ORDENAR y LIMITE (4)
Mi objetivo es ejecutar dos consultas diferentes y luego combinarlas.
Mi código es:
SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1
UNION
SELECT * FROM some tables WHERE ...
Obtuve el siguiente error:
# 1221 - Uso incorrecto de UNION y ORDER BY
Es importante que ORDER BY sea solo para la primera consulta. ¿Cómo puedo realizar esta tarea?
Puede usar paréntesis para permitir el uso de ORDER
/ LIMIT
en consultas individuales:
(SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0, 1)
UNION
(SELECT * FROM some tables WHERE ...)
ORDER BY 1 /* optional -- applies to the UNIONed result */
LIMIT 0, 100 /* optional -- applies to the UNIONed result */
Solo pon todo en paréntesis:
(SELECT * FROM table1 ORDER BY datetime )
UNION
(SELECT * FROM table2 ORDER BY datetime DESC)
SELECT * FROM (SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1) x
UNION ALL
SELECT * FROM some tables WHERE ...
Tenga en cuenta el uso de UNION ALL
:
-
UNION
elimina filas duplicadas del conjunto de resultados y el DB ordena todas las filas antes de hacer esto (por lo tanto, todo el conjunto de resultados está ordenado) -
UNION ALL
conserva tanto el orden como los duplicados.
(SELECT user_id AS id FROM tbl_user)
UNION
(SELECT address_id AS id FROM tbl_address)
ORDER BY id ASC LIMIT 10