alintagymnastics.com

  

Beste Artikel:

  
Main / Interbase SQL-Unterabfrage in where-Klausel

Interbase SQL-Unterabfrage in der where-Klausel

Prädikate sind Aussagen über Objekte, die ein boolesches Ergebnis zurückgeben: Ein Ausdruck wie Greater x, y, der genau dasselbe tut, würde sofort als Prädikat qualifiziert. Firebird unterstützt die folgenden SQL-Prädikate: Ob Prädikate oder nicht, sie wurden bereits eingeführt und werden in diesem Abschnitt nicht behandelt. Das IN-Prädikat vergleicht den Ausdruck auf der linken Seite mit einer Reihe von Ausdrücken, die in der Argumentliste übergeben wurden, und gibt true zurück, wenn eine Übereinstimmung gefunden wird.

Einige Beispiele für seine Verwendung sind: Dies ist sinnvoll: A IN Ausdruck1, Ausdruck2, ... Das erste Ergebnis kann verstanden werden, indem der gesamte Ausdruck als Disjunktion ODER-Kette von Gleichheitstests geschrieben wird: Wenn A einen richtigen Wert hat, die Liste jedoch einen oder mehrere NULL-Ausdrücke enthält, werden die Dinge etwas komplizierter: Oder allgemeiner: Falsche s, falls vorhanden, stehen nicht im Weg. In einer Disjunktion wahre Regeln. In verallgemeinerter Form: Wenn weder A noch ein Listenausdruck NULL sind, ist das Ergebnis natürlich immer wie erwartet und kann nur wahr oder falsch sein.

Beginnen Sie mit der ersten Frage in der linken Spalte, um es richtig zu verwenden. Wenn die Antwort Nein lautet, fahren Sie mit der nächsten Zeile fort. Sobald die Antwort Ja lautet, lesen Sie die Ergebnisse aus der zweiten und dritten Spalte und Sie sind fertig. In vielen Zusammenhängen e. Einerseits ist dies praktisch für Fälle, in denen Sie möglicherweise false erwarten, aber NULL zurückgegeben wird. Andererseits kann dies auch dazu führen, dass Sie true erwarten, wenn der Ausdruck mit NOT invertiert wird, und hier treten Probleme auf.

Bitte beachten Sie, dass selbst in einer Situation, in der A konstant ist und sein Wert niemals in der Spalte Number enthalten ist, das Ergebnis des Ausdrucks und damit Ihr Programmablauf im Laufe der Zeit je nach Fehlen oder Vorhandensein von NULL s in der Spalte variieren kann .

Stundenlanger Debugging-Spaß! Alle Firebird-Versionen vor 2. Bitte beachten Sie, dass ein Index möglicherweise aktiv ist, auch wenn er nicht explizit erstellt wurde, nämlich wenn ein Schlüssel für A definiert ist. Die Ausdrücke:. Als Ergebnis die Abfrage. Es können auch andere Fehler auftreten, z. Das ALL-Prädikat wird in Kürze eingeführt. Firebird verfügt über zwei Quantifizierer, mit denen Sie einen Wert mit den Ergebnissen einer Unterauswahl vergleichen können:

ALL gibt true zurück, wenn der Vergleich für jedes Element in der Unterauswahl true ist. Dies folgt aus den Definitionen und Regeln der formalen Logik. Das sollte vertraut aussehen. Der zweite ist anders, hat aber die gleiche allgemeine Form. Dies geschieht auf die gleiche Weise wie zuvor mit IN. Anstatt alle Schritte hier einzuschließen, werden nur die Ergebnistabellen angezeigt. Lesen Sie erneut die Fragen in der linken Spalte von oben nach unten. Wenn Sie der Meinung sind, dass diese Ergebnisse dem sehr ähnlich sind, was wir mit IN gesehen haben, haben Sie Recht: In Versionen vor 2.

Und wenn wir schon dabei sind, könnten wir auch die erste Frage fallen lassen: Der Grund, warum wir diese Fragen aufgenommen haben, ist die Bequemlichkeit: Sie können sie aber auch überspringen oder nur die zweite. Überspringen Sie jedoch nicht die erste Frage und beginnen Sie mit der zweiten: Angenommen, Sie möchten eine Liste der Landwirte, die auch Landbesitzer sind. Sie könnten eine wie diese bekommen: Diese Abfrage gibt die Namen aller Landwirte zurück, die ebenfalls in der Landbesitzertabelle aufgeführt sind. Natürlich kann sich die Suchbedingung der Unterauswahl für bestimmte Zeilen zu NULL entwickeln, aber das verursacht keine Unsicherheit: In Wirklichkeit gibt die Unterauswahl überhaupt keine Ergebnismenge zurück.

Die Engine durchläuft einfach die Grundbesitzer-Datensätze nacheinander und wendet die Suchbedingung an. Wenn es als falsch oder NULL ausgewertet wird, wird die Suche fortgesetzt. Bevor true zurückgegeben wird, muss der gesamte Satz durchlaufen werden. Es wird oft als Rückgabe von true beschrieben, wenn genau eine Zeile in der Unterabfrage die Suchbedingung erfüllt.

Immerhin hat eine Ergebnismenge entweder genau 1 Zeile oder eine andere Anzahl von Zeilen. Leider alle Versionen von Firebird bis einschließlich 2. Das Verhalten ist ziemlich inkonsistent, aber gleichzeitig vollständig reproduzierbar. Beachten Sie, dass hier nur die Einfügereihenfolge unterschiedlich ist!

Um die Sache noch schlimmer zu machen, alle Versionen vor 2. Der Code wurde für Firebird 2 korrigiert. Ob die anderen Zeilen false, NULL oder eine Kombination davon ergeben, ist irrelevant. Das IN-Prädikat. Mit einer leeren Liste. Mit einem NULL-Testausdruck. Mit NULL s in der Liste. Wenn mindestens einer der Ausdrücke in der Liste den gleichen Wert wie A: IN-Ergebnisse hat.

Eine nicht in der ausgewählten Nummer von MyTable. Fehlerwarnung Alle Firebird-Versionen vor 2. A [nicht] in Auswahl B von TB. Ergebniswerte. NULL Sonst gibt mindestens ein Vergleich true zurück? NULL Sonst i. Fehlerwarnung überarbeitet In Versionen vor 2.

NULL Sonst gibt mindestens ein Vergleich false zurück? Hinweis In der Realität gibt die Unterauswahl überhaupt keine Ergebnismenge zurück. Sonst ich.

(с) 2019 alintagymnastics.com