2011-06-01 56 views
19

Mi objetivo es ejecutar dos consultas diferentes y luego combinarlas.
Mi código es:UNION después de ORDER BY y LIMIT

SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1 
UNION 
SELECT * FROM some tables WHERE ... 

me sale el siguiente error:

#1221 - Incorrect usage of UNION and ORDER BY

Es importante que ORDER BY es sólo para la primera consulta. ¿Cómo puedo realizar esta tarea?

+1

Leer esta [Tutorial] (http: //www.mysqltutorial. org/sql-union-mysql.aspx) – luca

Respuesta

24

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 */ 
+2

error de sintaxis ... debe seleccionar del alias (entre corchetes) seleccione – Bohemian

+0

¡Sin error de sintaxis, acabo de comprobar! –

+0

hmmm - Lo revisé también y obtuve el error. Tal vez necesito actualizar mi mysql. ¡Lo siento! – Bohemian

8
SELECT * FROM (SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1) x 
UNION ALL 
SELECT * FROM some tables WHERE ... 

Nota el uso de UNION ALL:

  • UNION elimina filas duplicadas del conjunto de resultados y las órdenes DB todo las filas antes de hacer esto (por lo que la totalidad de conjunto de resultados se ordenan)
  • UNION ALL conserva el orden y duplicados
2

sólo hay que poner todo en paréntesis:

(SELECT * FROM table1 ORDER BY datetime ) 
UNION 
(SELECT * FROM table2 ORDER BY datetime DESC) 
+1

error de sintaxis ... debe seleccionar de la selección con alias (entre corchetes) – Bohemian

+0

[docs] (http://www.mysqltutorial.org/sql-union-mysql.aspx) ¿dónde lo leíste? – luca

+0

Lo revisé y obtuve el error. Tal vez necesito actualizar mi mysql. ¡Lo siento! – Bohemian

1
(SELECT user_id AS id FROM tbl_user) 
UNION 
(SELECT address_id AS id FROM tbl_address) 
ORDER BY id ASC LIMIT 10 
Cuestiones relacionadas