Wie gibt es Top-Schlüsselwort in SQL Server 2005, wie oben 1 Zeile in mysql auswählen, wenn ich auf mehrere Tabelle & wollen Extreme jeder ID/Spalte abrufen. Limit beschränkt die Nr. der Reihe kehrt zurück, damit es mein Problem nicht lösen kann.MYSQL top N Zeilen aus mehreren Tabellen Join
Antwort
SELECT v.*
FROM document d
OUTER APPLY
(
SELECT TOP 1 *
FROM version v
WHERE v.document = d.id
ORDER BY
v.revision DESC
) v
oder
SELECT v.*
FROM document d
LEFT JOIN
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY v.id ORDER BY revision DESC)
FROM version
) v
ON v.document = d.id
AND v.rn = 1
Letzteres ist effizienter, wenn Sie Ihre Dokumente in der Regel wenige Revisionen haben, und Sie müssen alle oder fast alle Dokumente auszuwählen; ersteres ist effizienter, wenn die Dokumente viele Revisionen haben oder Sie nur eine kleine Teilmenge von Dokumenten auswählen müssen.
Update:
Sorry, habe die Frage nicht bemerkt, ist etwa MySQL
.
In MySQL
, tun Sie es so:
SELECT *
FROM document d
LEFT JOIN
version v
ON v.id =
(
SELECT id
FROM version vi
WHERE vi.document = d.document
ORDER BY
vi.document DESC, vi.revision DESC, vi.id DESC
LIMIT 1
)
erstellen Composite-Index auf version (document, revision, id)
für diese schnell zu arbeiten.
MySQL unterstützt 'APPLY' oder' ROW_NUMBER() '(Fensterfunktionen) nicht. –
@Bill: Richtig, habe nicht bemerkt, dass es um 'MySQL' geht. – Quassnoi
Spätere Antwort funktioniert, aber was ist, wenn für einige Zeilen ich nur einen Datensatz haben ex: Version haben nur einen Datensatz für eine bestimmte docID in diesem Fall Abfrage abrufen keine Zeilen für diese ID. Sorry für späte Antwort/Kommentar –
Wenn ich Sie richtig verstehe, löst Top auch Ihr Problem nicht. oben entspricht genau der Grenze. Was Sie suchen, sind Aggregatfunktionen, wie max() oder min(), wenn Sie die Extreme wollen. zum Beispiel:
select link_id, max(column_a), min(column_b) from table_a a, table_b b
where a.link_id = b.link_id group by link_id
- 1. Select Top n Zeilen
- 2. mysql + update Top-n
- 3. Zeilen aus mehreren Tabellen löschen
- 4. Join-Tabellen von mehreren MySQL-Host
- 5. mySQL Links Join an mehreren Tabellen
- 6. SQL Löschen von Zeilen aus mehreren Tabellen
- 7. COUNT (*) aus mehreren Tabellen in MySQL
- 8. Auswahl aus mehreren Tabellen mit LEFT JOIN
- 9. Mysql wählen Zeilen aus mehreren Tabellen in einer bestimmten Reihenfolge
- 10. MySQL - Wählen Sie die Zeilen aus mehreren Tabellen
- 11. MySQL: alle Zeilen aus 3 Tabellen angezeigt
- 12. MySQL Join Tabellen mit mehreren doppelten Werten in Spalten verknüpfen
- 13. MySQL - Join 2 Tabellen
- 14. löschen Zeilen aus mehreren Tabellen Einschränkungsfehler
- 15. MySQL JOIN zwei Tabellen
- 16. MySQL JOIN unregelmäßige Tabellen
- 17. MySQL Join zwei Tabellen
- 18. SUM mit mehreren Tabellen MySQL
- 19. mysql Zählungen aus mehreren Tabellen Misch
- 20. MySql: Wählen Sie aus mehreren Tabellen
- 21. Einzelne HTML-Tabelle aus mehreren MySQL-Tabellen
- 22. Wählen Sie aus mehreren MySQL-Tabellen
- 23. PHP/MYSQL Join mehrere Tabellen
- 24. MySQLi aus mehreren Tabellen
- 25. mysql - Join-Tabellen basierend auf mehreren Spalten in der zweiten
- 26. mySQL Left Join an mehreren Tabellen mit Bedingungen
- 27. MySQL Join-Tabellen mit mehreren Werten in Spalte
- 28. Linke mit mehreren Tabellen Join Frage
- 29. Wie unterschiedlichen Maximalwert wählen aus mehreren Tabellen MySQL
- 30. MySQL Update nach N Zeilen
Vielleicht ein Beispiel? – hsz
Ja, die Frage ist nicht sehr klar. Ich habe nur getippt –
Die Frage ist nicht sehr klar, aber ich denke, es ist ein weiterer Fall der "größten-n-pro-Gruppe" Problem, das häufig auftritt. –