0%

Präzise Fragen stellen · Übung

Nur die ersten Zeilen behalten

Die Suche hat eine verlässliche erste, zweite und dritte Zeile. Angenommen, der Verleihtresen kann nur zwei Empfehlungen anzeigen. Weil du die Reihenfolge bereits festgelegt hast, hat „die ersten zwei“ jetzt eine eindeutige Bedeutung.

Entferne das Semikolon hinter der ORDER BY-Zeile und füge diese letzte Zeile hinzu:

LIMIT 2;

Klicke auf Run. SQLite sollte die beiden Zeilen am Anfang der Reihenfolge zurückgeben und dort aufhören:

Columns: asset_tag | name | category | loan_days
TL-100 | Cordless drill | tools | 7
EV-101 | Folding table | events | 7

LIMIT 2 entscheidet nicht, welche Zeilen am besten sind. Zuerst entscheidet die WHERE-Klausel, welche Gegenstände infrage kommen, und ORDER BY gibt diesen Treffern ihre vollständig festgelegten Positionen. LIMIT behält dann zwei Zeilen vom Anfang dieses sortierten Ergebnisses.

Diese Abfolge ist wichtig. Eine Abfrage mit LIMIT 2, aber ohne sinnvolle Sortierung, würde nach irgendwelchen zwei passenden Zeilen fragen, die SQLite gerade erzeugt. Das könnte in einem Durchlauf gut aussehen und in einem anderen Katalog einen besseren Treffer verpassen. Hier stehen die längsten erlaubten Leihdauern zuerst, Namen lösen gleiche Leihdauern auf, und IDs lösen wiederholte Namen auf, bevor das Limit angewendet wird.

Die Zahl ist ein Maximum. Wenn ein späterer Katalog nur einen passenden Gegenstand enthält, gibt SQLite eine Zeile zurück. Wenn kein Gegenstand passt, gibt es keine Zeilen zurück. Die Abfrage erfindet keinen Ersatz, um die zweite Position zu füllen.

Submit enthält mehr als zwei passende Gegenstände und fügt die besten Kandidaten spät ein. So können weder die Einfügereihenfolge noch kleine IDs zufällig die Antwort bestimmen. Behalte die vollständige Sortierung mit drei Schlüsseln bei und füge das Limit dahinter hinzu.

Wenn Run drei Zeilen zurückgibt, prüfe, ob das Semikolon an das Ende von LIMIT 2 verschoben wurde. Ein Semikolon beendet die SQL-Anweisung. Die neue Klausel hinter das alte Semikolon zu setzen würde sie daher außerhalb der Abfrage lassen.

Deine Suche gibt jetzt eine engere Auswahl statt des gesamten Kataloginhalts zurück: dieselben präzisen Treffer, vorhersehbar angeordnet, von denen nur die ersten beiden erhalten bleiben.

Aufgabe

Füge LIMIT 2 hinter der vollständigen ORDER BY-Klausel in search.sql hinzu. Behalte die Spalten, den Filter und alle drei Sortierschlüssel unverändert bei.

Führe die Abfrage aus und reiche das Ergebnis mit zwei Zeilen ein.