2010-10-24 16 views
12

Digamos que quiero llevar a cabo esta consulta:UNION ALL y limitar en MySQL

(SELECT a FROM t1 WHERE a=10 AND B=1) 
UNION ALL 
(SELECT a FROM t2 WHERE a=11 AND B=2) 
UNION ALL 
(SELECT a FROM t3 WHERE a=12 AND B=3) 
ORDER BY a LIMIT 1000; 

es MySQL lo suficientemente inteligente como para saltar "t3" si 550 resultados están disponibles en "t1" y 450 en "t2"?

Estoy buscando en los documentos de MySQL (http://dev.mysql.com/doc/refman/5.1/en/union.html) pero parece que no puedo encontrar la respuesta.

Respuesta

5

Según se especifica en la descripción de sintaxis UNIÓN (http://dev.mysql.com/doc/refman/5.1/en/union.html):

El comportamiento predeterminado para UNION es que las filas duplicadas se eliminan del resultado . La palabra clave opcional DISTINCT no tiene otro efecto que el predeterminado porque también especifica eliminación de fila duplicada. Con la ALL opcional, la eliminación de fila duplicada no ocurre y el resultado incluye todas las filas coincidentes de todas las declaraciones SELECT .

Supongo que esa es la respuesta a su pregunta.

+0

¡Gracias, gracias por su respuesta – Fretre

+0

En el resultado set, ¿los datos de t1 siempre estarán antes de t2 y t3 y t2 antes de t3? Necesito leer los datos ordenados por "B ASC" y preguntarme si puedo omitir la "orden de B ASC" que sigue a los sindicatos. – Fretre

+0

Se especifica en el manual, "UNION de forma predeterminada produce un conjunto de filas desordenado", por lo que, por lo que yo entiendo, no hay garantía. – Kel

0

Funciona para mí estoy usando MySQL.

pero asegúrese de que el número límite es siempre el mismo para todos

en ese ejemplo que se obtiene 3 resultados de cada mesa

(SELECT a FROM t1 WHERE a=10 AND B=1 LIMIT 9) 
UNION ALL 
(SELECT a FROM t2 WHERE a=11 AND B=2 LIMIT 9) 
UNION ALL 
(SELECT a FROM t3 WHERE a=12 AND B=3 LIMIT 9) 
+0

Esto no es correcto ya que devolverá un máximo de 27 filas. – brooNo