Freigeben über


Mehrwertige Vergleiche (ARRAY)

Spalten, die im Inhaltsindex gespeichert sind, können mehrere Werte aufweisen, und diese mehrwertigen Spalten können mithilfe des ARRAY-Vergleichsdrädikats verglichen werden.

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

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

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

Der Vergleichsoperator (comp_op) kann jeder der normalen Vergleichsoperatoren sein. Im mehrwertigen Vergleich haben die Vergleichsoperatoren geringfügig unterschiedliche Bedeutungen, je nachdem, ob ein Quantifizierer verwendet wird. Quantifizierer bestimmen, 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 jeden 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. Umgeben Sie nicht einzelne Elemente der Vergleichsliste durch eckige Klammern. Daher sind ARRAY [1] und ARRAY [1,2,3] gültig, aber ARRAY [1[,2][,3]] ist nicht.

 

Die Methode, die verwendet wird, um zu bestimmen, ob der mehrwertige Vergleich wahr oder falsch 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 wird, 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 führt durch das letzte Element. 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 einzelnen Operatoren.

Operator Beschreibung
= "Gleich" gibt "true" zurück, wenn jedes linksseitige Element denselben Wert wie das entsprechende rechte Element aufweist, und beide Arrays haben dieselbe Anzahl von Elementen.
!= oder <> "Nicht gleich" gibt "true" zurück, wenn ein oder mehrere linksseitige Elemente Werte aufweisen, die sich von den entsprechenden rechten Elementen unterscheiden, oder wenn die links- und rechtsseitigen Arrays nicht dieselbe 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 exakt mit den entsprechenden rechten Elementen übereinstimmen und das linke Array mehr Elemente aufweist als das rechte Array, 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 rechtsseitigen Elemente sind und das linke Array dieselben oder mehr Elemente aufweist als das rechte Array, 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 aufweist 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 werte der linken Seite gleich oder kleiner als die entsprechenden rechtsseitigen Elemente sind und das linke Array die gleichen oder weniger Elemente aufweist als das rechte Array, gibt "größer als" "true" zurück.

 

ALL Quantifier

Der ALL Quantifier 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 im Vergleich zu jedem Element auf der rechten Seite wahr sein. 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
= "Gleich" gibt "true" zurück, wenn jeder linke Elementwert mit jedem rechtsseitigen Elementwert identisch ist.
!= oder <> "Nicht gleich" gibt "true" zurück, wenn sich mindestens einer der Werte des linken Elements von einem der Werte des rechten Elements unterscheidet.
> "Größer als" gibt "true" zurück, wenn jeder wert der linken Seite größer als jeder rechte Elementwert ist.
>= "Größer als oder gleich" gibt "true" zurück, wenn jeder wert der linken Seite größer oder gleich jedem rechtsseitigen Elementwert ist.
< "Kleiner als" gibt "true" zurück, wenn jeder wert der linken Seite kleiner als jeder rechte Elementwert ist.
<= "Kleiner als oder gleich" gibt "true" zurück, wenn jeder wert der linken Seite 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 eins der Elemente auf der linken Seite im Vergleich zu einem beliebigen Element auf der rechten Seite wahr sein. Die Anzahl der Elemente auf der linken und rechten Seite hat keine Auswirkung auf das Ergebnis.

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

Operator Beschreibung
= "Gleich" gibt "true" zurück, wenn mindestens einer der Werte des linken Elements mit einem der werte der rechten Seite identisch ist.
!= oder <> "Nicht gleich" gibt "true" zurück, wenn keine der Werte für das linke Element mit einem der werte der rechten Seite identisch ist.
> "Größer als" gibt "true" zurück, wenn mindestens einer der Werte des linken Elements größer als jeder der rechte Elementwerte ist.
>= "Größer als oder gleich" gibt "true" zurück, wenn mindestens einer der Werte für das linke Element größer oder gleich einem der rechte Elementwerte ist.
< "Kleiner als" gibt "True" zurück, wenn mindestens einer der Werte für das linke Element kleiner als jeder der Werte des rechten Elements ist.
<= "Kleiner als oder gleich" gibt "true" zurück, wenn mindestens einer der Werte des linken Elements kleiner oder gleich einem der werte der rechten Seite ist.

 

Beispiele

Im folgenden Beispiel wird überprüft, ob sich Dokumente in den Kategorien "Finanzen" oder "Planung" befinden:

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

Die folgenden Vergleiche werden alle als "true" ausgewertet. Denken Sie daran, dass bei der tatsächlichen Verwendung die Suchabfragesyntax die linke Seite als Eigenschaft und nicht als Literalwert erfordert.

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

Konzeptionelle

Full-Text Prädikate

Nicht-Full-Text Prädikate