2016-10-20 2 views
-1

Ich habe 1 Abfrage, die über 180k Zeilen zurückgibt. Ich muss eine kleine Änderung vornehmen, so dass es nur etwa 10 weniger zurückgibt.Wie nur 10 Zeilen über SQL-Abfrage zurückgegeben werden

Wie zeige ich nur die 10 Zeilen als Ergebnis?

Ich habe EXCEPT versucht, aber es scheint viel mehr als nur die 10.

+2

* Zeigen Sie den Unterschied zwischen zwei Queres * Wo sind diese ?? –

+0

Können Sie uns Ihre Anfrage stellen? – Imanez

+0

Ich möchte den Unterschied zwischen 2 Autos wissen. Nun, welche? –

Antwort

1

Sie LIMIT verwenden können. Dies zeigt die ersten n Zeilen. Beispiel:

SELECT * FROM Orders LIMIT 10 

Wenn Sie versuchen, Seitenumbruch zu machen, fügen Sie OFFSET hinzu. Es gibt 10 Zeilen beginnend mit Zeile 20 zurück. Beispiel:

SELECT * FROM Orders LIMIT 10 OFFSET 20 
0

MySQL nicht EXCEPT (meines Wissens) unterstützt das zurückzukehren.

Wahrscheinlich die effiziente Route wäre die beiden WHERE Klauseln in eins zu übernehmen. Ich sage effiziente im Sinne von "Tun Sie es so, wenn Sie diese Abfrage in einem regelmäßigen Bericht oder einer Produktionsanwendung ausführen werden."

Zum Beispiel:

-- Query 1 
SELECT * FROM table WHERE `someDate`>'2016-01-01' 
-- Query 2 
SELECT * FROM table WHERE `someDate`>'2016-01-10' 
-- Becomes 
SELECT * FROM table WHERE `someDate` BETWEEN '2016-01-01' AND '2016-01-10' 

Es ist möglich, Sie was implizieren, dass die Abfragen ziemlich kompliziert sind, und Sie sind nach einem schnell (sprich: nicht unbedingt effizient) Weg, um die Differenz für ein immer einmalige Untersuchung.

Wenn das der Fall, Sie UNION und eine Unterabfrage missbrauchen könnte:

(Ungeprüfte, behandeln, als Pseudo-SQL ...)

SELECT 
    * 
FROM (
    SELECT * FROM table WHERE `someDate`>'2016-01-01' 
    UNION ALL 
    SELECT * FROM table WHERE `someDate`>'2016-01-10' 
) AS sub 
GROUP BY 
    `primaryKey` 
HAVING 
    COUNT(1) = 1; 

es aber hässlich. Und nicht effizient.

Unter der Annahme, dass die einzige Unterschied ist nur, dass einer Seite (ich es die „rechte Seite“ nennen wollen) ist fehlt Datensätze, die die linke enthält, können Sie die beiden Abfragen LEFT JOIN (als Subs) und Filter nach rechts-ist-null. Aber das würde davon abhängen, dass all diese Vorbehalte wahr sind.

Temporäre Tabellen kann dein Freund sein - zumal sie so leicht erstellt (und können indiziert werden):

CREATE TEMPORARY TABLE tmp_xyz AS SELECT ... FROM ... WHERE ...; 
Verwandte Themen