2017-12-20 5 views
1

Wie gebe ich alle Zeilen aus einer Tabelle mit Ausnahme der ersten Zeile zurück. Hier ist meine SQL-Anweisung:Alle Zeilen außer der obersten Zeile in Maria DB auswählen

SELECT * FROM article where article_no 
NOT IN 
(SELECT * FROM article order by article_no limit 1) 

Die oben angegebenen SQL-Abfrage einen Fehler wirft:

This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

+0

Versuchen Sie 'NICHT IN (SELECT article_no FROM Artikel Reihenfolge von article_no Limit 1)' – RiggsFolly

+0

zeigt Fehler: # 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; –

+0

Fehler in der Nähe von was? – RiggsFolly

Antwort

1

Die Unterabfrage muss nur wählen Sie die Spalte für den Vergleich benötigen:

SELECT * 
FROM article 
WHERE article_no NOT IN (
    SELECT article_no 
    FROM article 
    ORDER BY article_no 
    LIMIT 1 
) 

Die oben Abfrage funktioniert in MySQL, aber nicht in MariaDB, die doesn't currently support LIMIT in subqueries. Ich würde die Unterabfrage wie folgt umschreiben:

SELECT * 
FROM article 
WHERE article_no NOT IN (SELECT MIN(article_no) FROM article) 
+1

Nicht, dass ich übermäßig belästigt bin, aber das ist irgendwie .. gut sehr sehr sehr sehr wie mein Kommentar – RiggsFolly

+0

@RiggsFolly - Ich schrieb meine antworte vor dem Lesen der Kommentare. – Sonny

+1

Hmmm mein Kommentar ist seit 9 Minuten da, bevor deine Antwort gepostet wurde! Ich denke du musst ein langsamer Typ sein – RiggsFolly

1

Dadurch wird die Zeile mit dem niedrigsten Wert von article_no überspringt:

SELECT * 
    FROM article 
    ORDER BY article_no ASC 
    LIMIT 999999999 
    OFFSET 1; 

Vielleicht möchten Sie DESC (statt ASC) den höchsten Wert überspringen?

Beachten Sie, dass NOT IN (SELECT ...) ein sehr ineffizientes Konstrukt ist.

+0

gelöst Dies funktioniert nicht, da "OFFSET" kann nicht verwendet werden ohne 'LIMIT' in MySQL oder MariaDB – Sonny

+1

@Sonny - Oops. Ich habe "LIMIT" mit einem großen Wert hinzugefügt, damit es funktioniert. –