2010-10-24 18 views
12

Lassen Sie uns sagen, dass ich diese Abfrage ausführen möchten:UNION ALL und LIMIT in 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; 

Ist MySQL intelligent genug, um "t3" zu überspringen, wenn 550 Ergebnisse in "t1" und 450 in "T2" zur Verfügung stehen?

Ich schaue auf MySQL-Dokumentation (http://dev.mysql.com/doc/refman/5.1/en/union.html), aber ich kann nicht scheinen, die Antwort zu finden.

Antwort

5

Wie in UNION Syntax Beschreibung angegeben (http://dev.mysql.com/doc/refman/5.1/en/union.html):

Das Standardverhalten für UNION ist, dass doppelte Zeilen werden aus dem Ergebnis entfernt. Das optionale DISTINCT-Schlüsselwort hat keinen anderen Effekt als den Standardwert , da es auch Entfernung doppelter Zeilen angibt. Mit dem optionalen Schlüsselwort wird die doppelte Zeile nicht entfernt und das Ergebnis enthält alle übereinstimmenden Zeilen aller SELECT-Anweisungen.

Ich nehme an, das ist die Antwort auf Ihre Frage.

+0

Got bekommt, danke für deine Antwort – Fretre

+0

Im Ergebnis gesetzt, werden Daten von t1 immer vor t2 und t3 und t2 vor t3 sein? Ich muss die von "B ASC" bestellten Daten lesen und mich fragen, ob ich die "Reihenfolge nach B ASC" nach den Gewerkschaften überspringen kann. – Fretre

+0

Wird im Handbuch angegeben, "UNION erzeugt standardmäßig eine ungeordnete Reihe von Zeilen", so weit ich es verstehe, gibt es keine Garantie. – Kel

0

Es funktioniert für mich Ich benutze MySQL.

aber stellen Sie sicher, dass die Grenzzahl ist immer gleich für alle

in diesem Beispiel es Ihnen 3 Ergebnisse aus jeder Tabelle es

(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

Dies ist nicht richtig, da es maximal 27 Zeilen zurückgibt. – brooNo