Mehrwertige Vergleiche (ARRAY)

Im Inhaltsindex gespeicherte Spalten können mehrere Werte aufweisen, und diese mehrwertigen Spalten können mithilfe des ARRAY-Vergleichsprädikats verglichen werden.

Das ARRAY-Vergleichsprädikat weist die folgende Syntax auf:

...WHERE <column> <comp_op> [<quantifier>] <comparison_list>
                
...WHERE <column> <comp_op> <value>

Ein Fehler wird zurückgegeben, wenn der Spaltenverweis keine mehrwertige Spalte ist. Der Spaltendatentyp muss mit den Elementen der Vergleichsliste kompatibel sein. Bei Bedarf kann der Spaltenverweis in einen anderen Datentyp umgewandelt werden.

Der Vergleichsoperator (comp_op) kann einer der normalen Vergleichsoperatoren sein. In einem mehrwertigen Vergleich haben die Vergleichsoperatoren je nachdem, ob ein Quantifizierer verwendet wird, geringfügig unterschiedliche Bedeutungen. Quantifizierer ermitteln, ob ein Vergleich mit allen oder einigen Werten in der Vergleichsliste durchgeführt werden soll. Die Funktionen der Vergleichsoperatoren werden in den Tabellen angegeben, die die einzelnen Quantifizierer (ALL und SOME) weiter unten in diesem Dokument beschreiben.

Der Wert nach dem Operator gibt einen einzelnen Literalwert an, der mit allen Elementen der mehrwertigen Spalte verglichen wird. Wenn ein Element mit dem Wert übereinstimmt, ist das Prädikat true.

Die Vergleichsliste gibt ein Array von Literalwerten an, die mit der mehrwertigen Spalte verglichen werden. Die Syntax für die Vergleichsliste folgt:

ARRAY '['<literal> [,<literal>]']'

Wichtig

Beachten Sie die Syntax der Vergleichsliste. Die Gruppe der Literale, aus denen die Vergleichsliste besteht, muss von eckigen Klammern umgeben sein. Umschließen Sie einzelne Elemente der Vergleichsliste nicht durch eckige Klammern. Daher sind ARRAY [1] und ARRAY [1,2,3] gültig, aber ARRAY [1[,2][,3]] nicht.

 

Die Methode, mit der ermittelt wird, ob der mehrwertige Vergleich true oder false zurückgibt, wird vom optionalen Quantifizierer angegeben. In den folgenden Abschnitten werden die einzelnen Quantifizierer und die Funktionsweise jedes Vergleichsoperators beschrieben, wenn der Quantifizierer verwendet wird.

Fehlender Quantifizierer

Wenn kein Quantifizierer angegeben ist, wird jedes Element auf der linken Seite des Vergleichs mit dem -Element an derselben Position auf der rechten Seite verglichen. Der Vergleich beginnt mit dem ersten Element in den Arrays und wird durch das letzte Element fortgesetzt. Wenn alle Elemente auf der linken Seite den entsprechenden Elementen auf der rechten Seite entsprechen, wird die Anzahl der Arrayelemente verwendet, um zu bestimmen, welches Array größer ist.

Die folgende Tabelle zeigt den Vorgang der Vergleichsoperatoren, wenn kein Quantifizierer angegeben ist, und enthält eine kurze Beschreibung der beiden Operatoren.

Operator BESCHREIBUNG
= "Equal to" gibt true zurück, wenn jedes linksseitige Element den gleichen Wert wie das entsprechende rechtsseitige Element hat und beide Arrays die gleiche Anzahl von Elementen aufweisen.
!= oder <> "Nicht gleich" gibt true zurück, wenn ein oder mehrere linke Elemente Werte aufweisen, die sich von den entsprechenden rechten Elementen unterscheiden, oder wenn die linken und rechten Arrays nicht die gleiche Anzahl von Elementen aufweisen.
> "Größer als" gibt true zurück, wenn der Wert jedes linken Elements größer als der Wert des entsprechenden rechtsseitigen Elements ist. Wenn alle linksseitigen Elementwerte genau mit den entsprechenden rechten Elementen übereinstimmen und das linke Array über mehr Elemente als das rechte Array verfügt, gibt "größer als" true zurück.
>= "Größer als oder gleich" gibt true zurück, wenn der Wert jedes linken Elements größer oder gleich dem Wert des entsprechenden rechtsseitigen Elements ist. Wenn alle linksseitigen Elementwerte gleich oder größer als die entsprechenden rechten Elemente sind und das linke Array über dieselben oder mehr Elemente als das rechte Array verfügt, gibt "größer als" true zurück.
< "Kleiner als" gibt true zurück, wenn der Wert jedes linken Elements kleiner als der Wert des entsprechenden rechtsseitigen Elements ist. "Kleiner als" gibt auch true zurück, wenn die linke Seite weniger Elemente enthält als die rechte Seite.
<= "Kleiner als oder gleich" gibt true zurück, wenn der Wert jedes linken Elements kleiner oder gleich dem Wert des entsprechenden rechtsseitigen Elements ist. Wenn alle linksseitigen Elementwerte gleich oder kleiner als die entsprechenden rechtsseitigen Elemente sind und das linke Array dieselben oder weniger Elemente als das rechte Array aufweist, gibt "größer als" true zurück.

 

ALLE Quantifizierer

Der ALL-Quantifizierer gibt an, dass jedes Element auf der linken Seite mit jedem Element auf der rechten Seite verglichen wird. Um true zurückzugeben, muss der Vergleich für jedes Element auf der linken Seite true sein, im Vergleich zu jedem Element auf der rechten Seite. Die Anzahl der Elemente auf der linken und rechten Arrayseite hat keine Auswirkung auf das Ergebnis.

Die folgende Tabelle zeigt, wie jeder Vergleichsoperator mit dem ALL-Quantifizierer funktioniert.

Operator BESCHREIBUNG
= "Equal to" gibt true zurück, wenn jeder linke Elementwert mit jedem rechten Elementwert identisch ist.
!= oder <> "Nicht gleich" gibt true zurück, wenn sich mindestens einer der linken Elementwerte von einem der rechtsseitigen Elementwerte unterscheidet.
> "Größer als" gibt true zurück, wenn jeder linke Elementwert größer als jeder rechte Elementwert ist.
>= "Größer als oder gleich" gibt true zurück, wenn jeder wert des linken Elements größer oder gleich jedem rechtsseitigen Elementwert ist.
< "Kleiner als" gibt true zurück, wenn jeder wert des linken Elements kleiner als jeder rechte Elementwert ist.
<= "Kleiner als oder gleich" gibt true zurück, wenn jeder wert für das linke Element kleiner oder gleich jedem rechtsseitigen Elementwert ist.

 

SOME (oder ANY) Quantifizierer

Der SOME-Quantifizierer und der ANY-Quantifizierer können austauschbar verwendet werden. Wie der ALL-Quantifizierer gibt der SOME-Quantifizierer an, dass jedes Element auf der linken Seite mit jedem Element auf der rechten Seite verglichen wird. Um true zurückzugeben, muss der Vergleich für mindestens eines der Elemente auf der linken Seite im Vergleich zu jedem Element auf der rechten Seite true sein. Die Anzahl der Elemente auf den linken und rechten Seitenarrays hat keine Auswirkung auf das Ergebnis.

Die folgende Tabelle zeigt, wie jeder Vergleichsoperator mit dem SOME-Quantifizierer funktioniert.

Operator BESCHREIBUNG
= "Equal to" gibt true zurück, wenn mindestens einer der linken Elementwerte mit einem der rechtsseitigen Elementwerte identisch ist.
!= oder <> "Nicht gleich" gibt true zurück, wenn keiner der linksseitigen Elementwerte mit einem der rechten Elementwerte identisch ist.
> "Größer als" gibt true zurück, wenn mindestens einer der linken Elementwerte größer als jeder der rechtsseitigen Elementwerte ist.
>= "Größer als oder gleich" gibt true zurück, wenn mindestens einer der linken Elementwerte größer oder gleich einem der rechtsseitigen Elementwerte ist.
< "Kleiner als" gibt true zurück, wenn mindestens einer der linken Elementwerte kleiner als jeder der rechten Elementwerte ist.
<= "Kleiner als oder gleich" gibt true zurück, wenn mindestens einer der linken Elementwerte kleiner oder gleich einem der rechtsseitigen Elementwerte ist.

 

Beispiele

Im folgenden Beispiel wird überprüft, ob Dokumente in der Kategorie "Finanzen" oder "Planung" enthalten sind:

SELECT System.ItemUrl FROM SystemIndex WHERE System.Category =
SOME ARRAY['Finance','Planning']

Die folgenden Vergleiche bewerten alle true. Denken Sie daran, dass die Suchabfragesyntax bei der tatsächlichen Verwendung erfordert, dass die linke Seite eine Eigenschaft und kein Literalwert ist.

ARRAY [1,2] > ARRAY [1,1]
ARRAY [1,2] > ARRAY [1,1,2]
ARRAY [1,2] < ARRAY [1,2,3]
ARRAY [1,2] = SOME ARRAY [1,12,27,35,2]
ARRAY [1,1] != ALL ARRAY [1,2]
ARRAY [1,20,21,22] < SOME ARRAY [0,40]
ARRAY [1,20,21,22] < ANY ARRAY [0,40]

Referenz

LIKE Prädikat

Literalwertvergleich

NULL-Prädikat

Konzept

Volltext-Prädikate

Prädikate ohne Volltext