Ich möchte eine Abfrage "SELECT * FROM TABLE
" auslösen, sondern nur aus Zeile N+1
auswählen. Irgendeine Idee, wie man das macht?Wie überspringe ich die ersten n Zeilen in SQL-Abfrage
Antwort
Abfrage: in sql-server
declare @N int= 5 --Any random number
SELECT * FROM (
SELECT ROW_NUMBER()OVER(ORDER BY ID)AS ID
,ID
FROM TABLE_NAME
)AS tbl
WHERE ID >= @N + 1
ORDER BY tbl.ID
Dies wird Zeilen der Tabelle geben, wo ID
aus @N + 1
starten.
Ich stimme dieser Antwort nicht zu, das funktioniert nicht so, wie Sie es möchten. Mit dieser Lösung überspringen Sie nicht die N Zeilen, setzen Sie die N Zeilen mit ID> = N –
Hinweis * Diese Antwort funktioniert nur, wenn Ihre ID in sequenzieller Reihenfolge ist und Sie nie eine Zeile aus dieser Tabelle gelöscht haben. –
SQL Server:
select * from table
except
select top N * from table
Oracle:
select * from table
minus
select * from table where rownum <= N
with TableWithNum as (
select t.*, rownum as Num
from Table t
)
select * from TableWithNum where Num > N
Sie können Ihren Bedarf mehr oder weniger erfüllen.
Es gibt keine direkte Möglichkeit, was Sie mit SQL machen möchten. Allerdings ist es meiner Meinung nach kein Designfehler.
SQL soll nicht so verwendet werden.
In relationalen Datenbanken stellt eine Tabelle eine Beziehung dar, die per Definition definiert ist. Ein Satz enthält ungeordnete Elemente.
Auch verlassen Sie sich nicht auf die physische Reihenfolge der Datensätze. Die Reihenfolge der Zeilen wird vom RDBMS nicht garantiert.
Wenn die Reihenfolge der Datensätze wichtig ist, fügen Sie der Tabelle eine Spalte wie "Num" hinzu und verwenden Sie die folgende Abfrage. Dies ist natürlicher.
select *
from Table
where Num > N
order by Num
ANSI SQL: "Wählen Sie * aus Tabellenname OFFSET n", und auch in diesem Fall wird ORDER BY empfohlen. – jarlh
(a) Ja, gute Antwort. Siehe meinen Kommentar zu der Frage. (b) In Ihrem letzten Satz brauchen Sie nicht unbedingt * eine * Spalte hinzuzufügen, nur 'ORDER BY ...' welche Spalte auch immer benötigt wird, um das gewünschte Ergebnis zu erhalten. (c) Aktiviere die ORDER BY.' – PerformanceDBA
Was:
SELECT * FROM table LIMIT 50 OFFSET 1
Beachten Sie, dass dies nicht in allen Varianten von SQL funktioniert, da die Schlüsselwörter 'LIMIT' und 'OFFSET' nicht Teil des ANSI-Standards sind (siehe [diese Frage] (http://stackoverflow.com/q/1528604/ 168775)). – eykanal
Wollen Sie wie etwas in LINQ 5 überspringen und 10 nehmen?
SELECT TOP(10) *
FROM MY_TABLE
WHERE ID not in (SELECT TOP(5) ID From My_TABLE);
verwenden:
SELECT *
FROM Sales.SalesOrderHeader
ORDER BY OrderDate
OFFSET (@Skip) ROWS FETCH NEXT (@Take) ROWS ONLY
Hinweis: diese Abfrage funktioniert nur für SQL Server 2012 und höher –
Für SQL2012 und späteren Versionen ist die beste Methode @ MajidBasirati Antwort.
Ich liebte auch @ CarlosToledo die Antwort, es ist nicht auf eine SQL Server-Version beschränkt, aber es fehlt Order By Klauses. Ohne sie kann es falsche Ergebnisse zurückgeben.
Für SQL 2008 und später würde ich Common Table Expressions für bessere Leistung verwenden.
-- This example omits first 10 records and select next 5 records
;WITH MyCTE(Id) as
(
SELECT TOP (10) Id
FROM MY_TABLE
ORDER BY Id
)
SELECT TOP (5) *
FROM MY_TABLE
INNER JOIN MyCTE ON (MyCTE.Id <> MY_TABLE.Id)
ORDER BY Id
Um dies in SQL Server zu tun, müssen Sie die Abfrage nach einer Spalte bestellen, damit Sie die gewünschten Zeilen angeben können.
Beispiel:
select * from table order by [some_column]
offset 10 rows
FETCH NEXT 10 rows only
Dies mit allen DBRM/SQL arbeitet, ist es Standard ANSI:
SELECT *
FROM owner.tablename A
WHERE condition
AND n+1 <= (
SELECT COUNT(DISTINCT b.column_order)
FROM owner.tablename B
WHERE condition
AND b.column_order>a.column_order
)
ORDER BY a.column_order DESC
Die obige codierte Anweisung select überspringt die ersten n Zeilen mit größerem Wert in column_order. Sie können die Bedingung so ändern, dass sie wie gewünscht kleiner abgerufen wird. – fspino
Ich weiß, es ist ziemlich spät, um jetzt die Anfrage zu beantworten. Aber ich habe eine etwas andere Lösung als die anderen, von denen ich glaube, dass sie eine bessere Leistung hat, da keine Vergleiche in der SQL-Abfrage durchgeführt werden, sondern nur sortiert wird. Sie können seine erhebliche Leistungsverbesserung im Grunde sehen, wenn der Wert von SKIP groß genug ist.
Beste Leistung aber nur für SQL Server 2012 und höher. Original von @Majid Basirati's answer das ist wieder erwähnenswert.
DECLARE @Skip INT = 2, @Take INT = 2 SELECT * FROM TABLE_NAME ORDER BY ID ASC OFFSET (@Skip) ROWS FETCH NEXT (@Take) ROWS ONLY
nicht so gut wie die erste, aber kompatibel mit SQL Server 2005 und höher.
DECLARE @Skip INT = 2, @Take INT = 2 SELECT * FROM ( SELECT TOP (@Take) * FROM ( SELECT TOP (@Take + @Skip) * FROM TABLE_NAME ORDER BY ID ASC ) T1 ORDER BY ID DESC ) T2 ORDER BY ID ASC
In FairCom SQL (das ist ein Pseudo-MySQL ist), kann ich dies tun, in einer super einfachen SQL-Anweisung, wie folgt:
SELECT SKIP 10 * FROM TABLE ORDER BY Id
Offensichtlich kann man nur 10
ersetzen jede deklarierte Variable Ihres Wunsches.
Ich habe keinen Zugang zu MS SQL oder anderen Plattformen, aber ich bin wirklich überrascht, dass MS SQL so etwas nicht unterstützt.
versuchen unter Abfrage ist es Arbeit
SELECT * FROM `my_table` WHERE id != (SELECT id From my_table LIMIT 1)
Hope this
- 1. Wie überspringe ich effektiv die ersten n Zeilen in einer Datei mit Python?
- 2. Überspringe 'N' Zeilen und hole alle verfügbaren
- 3. Wie wähle ich die ersten N Zeilen jeder Gruppe?
- 4. Wie man die ersten n Zeilen in einer Datei verbindet
- 5. Die ersten N Zeilen einer Datei in Python lesen
- 6. Überspringe nächste n Haltepunkte in lldb
- 7. Mysql GROUP_CONCAT der ersten n Zeilen
- 8. mysql wählen Sie die ersten n Zeilen pro Gruppe
- 9. tidyr nur die ersten n Instanzen trennen
- 10. Wie kann ich mein Bash Script dazu bringen die ersten n und letzten n Zeilen von einer Variablen zu entfernen? `
- 11. Wie drucke ich die ersten n Bytes, wenn die Länge der Zeichenfolge größer als n ist?
- 12. Wie überspringe ich die Funktion mit Lambdacode?
- 13. Zähle n Tage, überspringe bestimmte Daten
- 14. Shell-Skript Telnet überspringe die While-Schleife am ersten Punkt
- 15. Wie überspringe erste Zeilen der Datei mit Node-CSV-Parser?
- 16. Wie aktualisiere ich n Zeilen in einer Tabelle?
- 17. Ruby - wie man die ersten n Zeilen aus der Datei in das Array liest
- 18. Wie wählt man die ersten N Zeilen aus einer Tabelle in T-SQL aus?
- 19. Wie überspringe ich das erste Element eines Iterators in Rust?
- 20. Wie update ersten n Datensätze in SQLite
- 21. Wie überspringe ich Zeilen, die in Perl keine Leerzeichen oder eine Zahl sind?
- 22. Wie überspringe ich die erste Iteration eines $ .each()?
- 23. ersten n Spalten Datenrahmen
- 24. LOAD DATA LOCAL, Wie überspringe ich die erste Zeile?
- 25. Wie überspringe ich einen Codeceptionstest cest
- 26. Wie überspringe ich Tests in PHPunit?
- 27. Wie überspringe ich ein Verzeichnis in awk?
- 28. sortieren Zeilen in Textdatei, sondern verwenden nur die ersten Zeichen N
- 29. die ersten „n“ Elemente mit jQuery
- 30. Select Top n Zeilen
helfen, die rdbms werden Sie mit (f.e. Oracle, MySQL oder SQL-Server)? –
Welche DBMS? "OFFSET n" ist ANSI SQL, aber viele dbms-Produkte tun dies auf ihre eigene Weise, z. LIMIT, TOP ... – jarlh
Wenn Sie Zeilen in einem bestimmten Zeilennummernbereich finden möchten, können Sie auch Funktionen wie ['ROW_NUMBER'] (https://msdn.microsoft.com/en-us/library/ms186734 verwenden .aspx). Aber das hängt wirklich von Ihrem dbms ab. –