Informazioni di riferimento sul linguaggio di query di Gemelli digitali di Azure: clausola MATCH
Questo documento contiene informazioni di riferimento sulla clausola MATCH per il linguaggio di query di Gemelli digitali di Azure.
La MATCH
clausola viene usata nel linguaggio di query di Gemelli digitali di Azure come parte della clausola FROM. MATCH
consente di specificare quale modello deve essere seguito durante l'attraversamento delle relazioni nel grafico di Gemelli digitali di Azure ( noto anche come modello di query "hop variabile").
Questa clausola è facoltativa durante l'esecuzione di query.
Sintassi principale: MATCH
MATCH
supporta qualsiasi query che trova un percorso tra gemelli all'interno di un intervallo di hop, in base a determinate condizioni di relazione.
La condizione di relazione può includere uno o più dei dettagli seguenti:
- Direzione della relazione (da sinistra a destra, da destra a sinistra o non direzionale)
- nome della relazione (singolo nome o elenco di possibilità)
- Numero di "hop" da un gemello a un altro (numero esatto o intervallo)
- Assegnazione di variabile di query per rappresentare la relazione all'interno del testo della query. Ciò consentirà anche di filtrare in base alle proprietà delle relazioni.
Una query con una MATCH
clausola deve inoltre utilizzare la clausola WHERE per specificare per $dtId
almeno uno dei gemelli a cui fa riferimento.
Nota
MATCH
è un superset di tutte le JOIN
query che possono essere eseguite nell'archivio query.
Sintassi
Ecco la sintassi di base MATCH
.
Contiene questi segnaposto:
twin_or_twin_collection
(x2): laMATCH
clausola richiede un operando per rappresentare un singolo gemello. L'altro operando può rappresentare un altro gemello singolo o una raccolta di gemelli.relationship_condition
: in questo spazio definire una condizione che descrive la relazione tra i gemelli o le raccolte di gemelli. La condizione può specificare la direzione della relazione, specificare il nome della relazione, specificare il numero di hop, specificare le proprietà della relazione o qualsiasi combinazione di queste opzioni.twin_ID
: in questo caso, specificare un$dtId
oggetto all'interno di una delle raccolte di gemelli in modo che uno degli operandi rappresenti un singolo gemello.
--SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[relationship_condition]-(twin_or_twin_collection_2)
WHERE twin_or_twin_collection.$dtId = 'twin_ID'
-- AND ...
È possibile lasciare vuota una delle raccolte di dispositivi gemelli per consentire a qualsiasi gemello di funzionare in tale punto.
È anche possibile modificare il numero di condizioni di relazione, in modo da avere più condizioni di relazione concatenati o nessuna condizione di relazione:
--Chained relationship conditions
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[relationship_condition]-(twin_or_twin_collection_2)-[relationship_condition]-(twin_or_twin_collection_3)...
WHERE twin_or_twin_collection.$dtId = 'twin_ID'
-- No relationship condition
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)
WHERE twin_or_twin_collection.$dtId = 'twin_ID'
Per altri dettagli su ogni tipo di condizione di relazione e su come combinarli, vedere le altre sezioni di questo documento.
Esempio
Di seguito è riportato un esempio di query che usa MATCH
.
La query specifica una direzione di relazione e cerca building and sensor twins where...
- il sensore è destinato a qualsiasi relazione di un gemello Building con un
$dtId
building21 e - il sensore ha una temperatura superiore a 50. L'edificio e il sensore sono entrambi inclusi nel risultato della query.
SELECT Building, Sensor FROM DIGITALTWINS
MATCH (Building)-[]->(Sensor)
WHERE Building.$dtId = 'Building21' AND Sensor.temperature > 50
Specificare la direzione della relazione
Utilizzare la condizione di relazione nella MATCH
clausola per specificare una direzione di relazione tra i gemelli. Le possibili direzioni includono da sinistra a destra, da destra a sinistra o non direzionale. Le relazioni cicliche vengono rilevate automaticamente, in modo che una relazione venga attraversata una sola volta.
Nota
È possibile rappresentare relazioni bidirezionali usando il concatenamento.
Sintassi
Nota
Gli esempi in questa sezione sono incentrati sulla direzione delle relazioni. Non specificano nomi di relazione, per impostazione predefinita hanno un singolo hop e non assegnano variabili di query alle relazioni. Per istruzioni su come eseguire altre operazioni con queste altre condizioni, vedere Specificare il nome della relazione, Specificare il numero di hop e Assegnare la variabile di query alla relazione. Per informazioni su come usare più di queste insieme nella stessa query, vedere Combinare le operazioni MATCH.
Le descrizioni delle relazioni direzionali usano una rappresentazione visiva di una freccia per indicare la direzione della relazione. La freccia include uno spazio riservato tra parentesi quadre ([]
) per un nome di relazione facoltativo.
In questa sezione viene illustrata la sintassi per diverse direzioni delle relazioni. I valori segnaposto che devono essere sostituiti con i valori sono source_twin_or_twin_collection
e target_twin_or_twin_collection
.
Per una relazione da sinistra a destra , usare la sintassi seguente.
-- SELECT ... FROM ...
MATCH (source_twin_or_twin_collection)-[]->(target_twin_or_twin_collection)
-- WHERE ...
Per una relazione da destra a sinistra , usare la sintassi seguente.
-- SELECT ... FROM ...
MATCH (target_twin_or_twin_collection)<-[]-(source_twin_or_twin_collection)
-- WHERE ...
Per una relazione non direzionale , utilizzare la sintassi seguente. In questo modo non verrà specificata una direzione per la relazione, pertanto le relazioni di qualsiasi direzione verranno incluse nel risultato.
-- SELECT ... FROM ...
MATCH (source_twin_or_twin_collection)-[]-(target_twin_or_twin_collection)
-- WHERE ...
Suggerimento
Le query non direzionali richiedono un'elaborazione aggiuntiva, che può comportare un aumento della latenza e dei costi.
Esempi
Il primo esempio mostra un attraversamento direzionale da sinistra a destra. Questa query trova i gemelli Room e Factory dove...
- Room targets Factory (con qualsiasi nome di relazione)
- La stanza ha un valore di temperatura maggiore di 50
- Fabbrica ha un
$dtId
'ABC'
SELECT Room, Factory FROM DIGITALTWINS MATCH (Room)-[]->(Factory)
WHERE Room.temperature > 50 AND Factory.$dtId = 'ABC'
Nota
Le query MATCH che contengono $dtId
filtri su qualsiasi gemello diverso dal gemello iniziale per l'attraversamento MATCH possono mostrare risultati vuoti. Questo vale per factory.$dtId
nell'esempio precedente. Per altre informazioni, vedere Limitazioni.
L'esempio seguente mostra un attraversamento direzionale da destra a sinistra. Questa query è simile a quella precedente, ma la direzione della relazione tra Room e Factory viene invertita. Questa query trova i gemelli Room e Factory dove...
- Factory targets Room (con qualsiasi nome di relazione)
- Fabbrica ha un
$dtId
'ABC' - La stanza ha un valore di temperatura maggiore di 50
SELECT Room, Factory FROM DIGITALTWINS MATCH (Room)<-[]-(Factory)
WHERE Factory.$dtId = 'ABC' AND Room.temperature > 50
Nell'esempio seguente viene illustrato un attraversamento non direzionale. Questa query trova i gemelli Room e Factory dove...
- Room e Factory condividono qualsiasi nome di relazione, andando in entrambe le direzioni
- Fabbrica ha un
$dtId
'ABC' - La stanza ha un valore di umidità maggiore di 70
SELECT Factory, Room FROM DIGITALTWINS MATCH (Factory)-[]-(Room)
WHERE Factory.$dtId ='ABC' AND Room.humidity > 70
Specificare il nome della relazione
Facoltativamente, è possibile usare la condizione di relazione nella MATCH
clausola per specificare i nomi per le relazioni tra i gemelli. È possibile specificare un singolo nome o un elenco di nomi possibili. Il nome della relazione facoltativa è incluso nella sintassi della freccia per specificare la direzione della relazione.
Se non si specifica un nome di relazione, la query includerà tutti i nomi delle relazioni per impostazione predefinita.
Suggerimento
La specifica dei nomi delle relazioni nella query può migliorare le prestazioni e rendere i risultati più prevedibili.
Sintassi
Nota
Gli esempi in questa sezione sono incentrati sul nome della relazione. Tutti mostrano relazioni non direzionali, per impostazione predefinita a un singolo hop e non assegnano variabili di query alle relazioni. Per istruzioni su come eseguire altre operazioni con queste altre condizioni, vedere Specificare la direzione della relazione, Specificare il numero di hop e Assegnare la variabile di query alla relazione. Per informazioni su come usare più di queste insieme nella stessa query, vedere Combinare le operazioni MATCH.
Specificare il nome di una relazione da attraversare nella MATCH
clausola tra parentesi quadre ([]
), dopo due punti (:
). In questa sezione viene illustrata la sintassi per specificare le relazioni denominate.
Per un singolo nome, usare la sintassi seguente. I valori segnaposto che devono essere sostituiti con i valori sono twin_or_twin_collection_1
, relationship_name
e twin_or_twin_collection_2
.
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[:relationship_name]-(twin_or_twin_collection_2)
-- WHERE ...
Per più nomi possibili, usare la sintassi seguente. I valori segnaposto che devono essere sostituiti con i valori sono twin_or_twin_collection_1
, , relationship_name_option_1
relationship_name_option_2
, twin_or_twin_collection_2
e la nota per continuare il modello in base alle esigenze per il numero di nomi di relazione da immettere.
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[:relationship_name_option_1|relationship_name_option_2|continue pattern as needed...]-(twin_or_twin_collection_2)
-- WHERE ...
Importante
I due punti (:
) all'interno delle parentesi quadre sono una parte necessaria della sintassi per specificare un nome di relazione in una MATCH
query. Se non si includono i due punti, la query non specifica un nome di relazione. È invece disponibile una query che assegna una variabile di query alla relazione.
(Impostazione predefinita) Per lasciare il nome non specificato, lasciare vuote le parentesi quadre di informazioni sul nome, come illustrato di seguito:
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[]-(twin_or_twin_collection_2)
-- WHERE ...
Esempi
Nell'esempio seguente viene illustrato un singolo nome di relazione. Questa query trova i gemelli Building e Sensor dove...
- La compilazione ha una relazione 'contains' con Sensor (andando in entrambe le direzioni)
- L'edificio ha un
$dtId
'Seattle21'
SELECT Building, Sensor FROM DIGITALTWINS
MATCH (Building)-[:contains]-(Sensor)
WHERE Building.$dtId = 'Seattle21'
Nell'esempio seguente vengono illustrati più nomi di relazione possibili. Questa query è simile a quella precedente, ma nel risultato sono inclusi più nomi di relazione possibili. Questa query trova i gemelli Building e Sensor dove...
- La compilazione ha una relazione 'contains' o 'isAssociatedWith' con Sensor (andando in entrambe le direzioni)
- L'edificio ha un
$dtId
'Seattle21'
SELECT Building, Sensor FROM DIGITALTWINS
MATCH (Building)-[:contains|isAssociatedWith]-(Sensor)
WHERE building.$dtId = 'Seattle21'
Nell'esempio seguente non è specificato alcun nome di relazione. Di conseguenza, le relazioni con qualsiasi nome verranno incluse nel risultato della query. Questa query trova i gemelli Building e Sensor dove...
- La compilazione ha una relazione con Sensor con qualsiasi nome (e andando in entrambe le direzioni)
- L'edificio ha un
$dtId
'Seattle21'
SELECT Building, Sensor FROM DIGITALTWINS
MATCH (Building-[]-(Sensor)
WHERE Building.$dtId = 'Seattle21'
Specificare il numero di hop
Facoltativamente, è possibile usare la condizione di relazione nella MATCH
clausola per specificare il numero di hop per le relazioni tra i gemelli. È possibile specificare un numero esatto o un intervallo. Questo valore facoltativo è incluso nella sintassi della freccia per specificare la direzione della relazione.
Se non si specifica un numero di hop, per impostazione predefinita la query sarà un hop.
Importante
Se si specifica un numero di hop maggiore di uno, non è possibile assegnare una variabile di query alla relazione. Solo una di queste condizioni può essere usata all'interno della stessa query.
Sintassi
Nota
Gli esempi di questa sezione sono incentrati sul numero di hop. Tutti mostrano relazioni non direzionali senza specificare nomi. Per istruzioni su come eseguire altre operazioni con queste altre condizioni, vedere Specificare la direzione della relazione e Specificare il nome della relazione. Per informazioni su come usare più di queste insieme nella stessa query, vedere Combinare le operazioni MATCH.
Specificare il numero di hop da attraversare nella MATCH
clausola tra parentesi quadre ([]
).
Per specificare un numero esatto di hop, usare la sintassi seguente. I valori segnaposto che devono essere sostituiti con i valori sono twin_or_twin_collection_1
, number_of_hops
e twin_or_twin_collection_2
.
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[*number_of_hops]-(twin_or_twin_collection_2)
-- WHERE ...
Per specificare un intervallo di hop, utilizzare la sintassi seguente. I valori segnaposto che devono essere sostituiti con i valori sono twin_or_twin_collection_1
, ending_limit
starting_limit
e twin_or_twin_collection_2
. Il limite iniziale non è incluso nell'intervallo, mentre il limite finale è incluso.
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[*starting_limit..ending_limit]-(twin_or_twin_collection_2)
-- WHERE ...
È anche possibile escludere il limite iniziale per indicare "qualsiasi elemento fino a" (e incluso) il limite finale. È necessario specificare sempre un limite finale.
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[*..ending_limit]-(twin_or_twin_collection_2)
-- WHERE ...
(Impostazione predefinita) Per impostazione predefinita, lasciare vuote le parentesi quadre di informazioni sull'hop, come illustrato di seguito:
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[]-(twin_or_twin_collection_2)
-- WHERE ...
Esempi
Nell'esempio seguente viene specificato un numero esatto di hop. La query restituirà solo relazioni tra i gemelli Floor e Room che sono esattamente 3 hop.
SELECT Floor, Room FROM DIGITALTWINS
MATCH (Floor)-[*3]-(Room)
WHERE Floor.$dtId = 'thermostat-15'
Nell'esempio seguente viene specificato un intervallo di hop. La query restituirà relazioni tra i gemelli Floor e Room compresi tra 1 e 3 hop (ovvero il numero di hop è 2 o 3).
SELECT Floor, Room FROM DIGITALTWINS
MATCH (Floor)-[*1..3]-(Room)
WHERE Floor.$dtId = 'thermostat-15'
È anche possibile visualizzare un intervallo specificando un solo limite. Nell'esempio seguente la query restituirà relazioni tra i gemelli Floor e Room che sono al massimo 2 hop (ovvero il numero di hop è 1 o 2).
SELECT Floor, Room FROM DIGITALTWINS
MATCH (Floor)-[*..2]-(Room)
WHERE Floor.$dtId = 'thermostat-15'
Nell'esempio seguente non è specificato alcun numero di hop, quindi per impostazione predefinita verrà impostato un hop tra i gemelli Floor e Room.
SELECT Floor, Room FROM DIGITALTWINS
MATCH (Floor)-[]-(Room)
WHERE Floor.$dtId = 'thermostat-15'
Assegnare la variabile di query alla relazione (e specificare le proprietà delle relazioni)
Facoltativamente, è possibile assegnare una variabile di query alla relazione a cui si fa riferimento nella MATCH
clausola , in modo che sia possibile farvi riferimento in base al nome nel testo della query.
Un risultato utile di questa operazione è la possibilità di filtrare le proprietà delle relazioni nella WHERE
clausola .
Importante
L'assegnazione di una variabile di query alla relazione è supportata solo quando la query specifica un singolo hop. All'interno di una query è necessario scegliere tra specificare una variabile di relazione e specificare un numero maggiore di hop.
Sintassi
Nota
Gli esempi in questa sezione si concentrano su una variabile di query per la relazione. Tutti mostrano relazioni non direzionali senza specificare nomi. Per istruzioni su come eseguire altre operazioni con queste altre condizioni, vedere Specificare la direzione della relazione e Specificare il nome della relazione. Per informazioni su come usare più di queste insieme nella stessa query, vedere Combinare le operazioni MATCH.
Per assegnare una variabile di query alla relazione, inserire il nome della variabile tra parentesi quadre ([]
). I valori segnaposto indicati di seguito che devono essere sostituiti con i valori sono twin_or_twin_collection_1
, relationship_variable
e twin_or_twin_collection_2
.
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[relationship_variable]-(twin_or_twin_collection_2>)
-- WHERE ...
Esempi
Nell'esempio seguente viene assegnata una variabile di query 'Rel' alla relazione. Successivamente, nella WHERE
clausola viene usata la variabile per specificare che la relazione Rel deve avere una proprietà name con il valore 'child'.
SELECT Floor,Cafe, Rel DIGITALTWINS
MATCH (Floor)-[Rel]-(Cafe)
WHERE Floor.$dtId = 'thermostat-15' AND Rel.name = 'child'
Combinare le operazioni MATCH
È possibile combinare più condizioni di relazione nella stessa query. È anche possibile concatenare più condizioni di relazione per esprimere relazioni bidirezionali o altre combinazioni più grandi.
Sintassi
In una singola query è possibile combinare la direzione della relazione, il nome della relazione e un numero di hop o un'assegnazione di variabile di query.
Negli esempi di sintassi seguenti viene illustrato come combinare questi attributi. È anche possibile escludere uno dei dettagli facoltativi visualizzati nei segnaposto per omettere tale parte della condizione.
Per specificare la direzione della relazione, il nome della relazione e il numero di hop all'interno di una singola query, utilizzare la sintassi seguente all'interno della condizione della relazione. I valori segnaposto che devono essere sostituiti con i valori sono twin_or_twin_collection_1
e twin_or_twin_collection_2
, optional_left_angle_bracket
e relationship_name(s)
optional_right_angle_bracket
, e number_of_hops
.
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)optional_left_angle_bracket-[:relationship_name(s)*number_of_hops]-optional_right_angle_bracket(twin_or_twin_collection_2)
-- WHERE
Per specificare la direzione della relazione, il nome della relazione e una variabile di query per la relazione all'interno di una singola query, utilizzare la sintassi seguente all'interno della condizione della relazione. I valori segnaposto che devono essere sostituiti con i valori sono twin_or_twin_collection_1
e twin_or_twin_collection_2
, optional_left_angle_bracket
e relationship_variable
optional_right_angle_bracket
, e relationship_name(s)
.
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)optional_left_angle_bracket-[relationship_variable:relationship_name(s)]-optional_right_angle_bracket(twin_or_twin_collection_2)
-- WHERE
Nota
In base alle opzioni per specificare la direzione della relazione, è necessario scegliere tra una parentesi angolare sinistra per una relazione da sinistra a destra o una parentesi uncinata destra per una relazione da destra a sinistra. Non è possibile includere entrambe le relazioni sulla stessa freccia, ma possono rappresentare relazioni bidirezionali tramite concatenamento.
È possibile concatenare più condizioni di relazione, in questo modo. I valori segnaposto che devono essere sostituiti con i valori sono twin_or_twin_collection_1
, tutte le istanze di relationship_condition
e twin_or_twin_collection_2
.
--Chained relationship conditions
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[relationship_condition]-(twin_or_twin_collection_2)-[relationship_condition]-(twin_or_twin_collection_3)...
WHERE twin_or_twin_collection.$dtId = 'twin_ID'
Esempi
Ecco un esempio che combina la direzione della relazione, il nome della relazione e il numero di hop. La query seguente trova i gemelli Floor e Room in cui la relazione tra Floor e Room soddisfa queste condizioni:
- la relazione è da sinistra a destra, con Floor come origine e Stanza come destinazione
- la relazione ha il nome 'contains' o 'isAssociatedWith'
- la relazione ha 4 o 5 hop
La query specifica inoltre che floor gemello ha un $dtId
valore di "thermostat-15".
SELECT Floor, Room FROM DIGITALTWINS
MATCH (Floor)-[:contains|isAssociatedWith*3..5]->(Room)
WHERE Floor.$dtId = 'thermostat-15'
Ecco un esempio che combina la direzione della relazione, il nome della relazione e una variabile di query denominata per la relazione. La query seguente trova i gemelli Floor e Room in cui la relazione tra Floor e Room viene assegnata a una variabile r
di query e soddisfa queste condizioni:
- la relazione è da sinistra a destra, con Floor come origine e Stanza come destinazione
- la relazione ha il nome 'contains' o 'isAssociatedWith'
- la relazione, a cui viene assegnata una variabile
r
di query , ha una proprietà length uguale a 10
La query specifica inoltre che floor gemello ha un $dtId
valore di "thermostat-15".
SELECT Floor, Room FROM DIGITALTWINS
MATCH (Floor)-[r:contains|isAssociatedWith]->(Room)
WHERE Floor.$dtId = 'thermostat-15' AND r.length = 10
Nell'esempio seguente vengono illustrate le condizioni delle relazioni concatenati . La query trova i gemelli Floor, Cafe e Room, dove...
- la relazione tra Floor e Room soddisfa queste condizioni:
- la relazione è da sinistra a destra, con Floor come fonte e Cafe come destinazione
- la relazione ha il nome 'contains' o 'isAssociatedWith'
- la relazione, a cui è assegnata la variabile
r
di query , ha una proprietà length uguale a 10
- la relazione tra Cafe e Room soddisfa queste condizioni:
- la relazione è da destra a sinistra, con Room come fonte e Cafe come destinazione
- la relazione ha un nome di 'has' o 'includes'
- la relazione ha fino a 3 (quindi 1, 2 o 3) hop
La query specifica inoltre che il piano gemello ha un $dtId
valore di "thermostat-15" e twin Cafe ha una temperatura di 55.
SELECT Floor,Room, Cafe FROM DIGITALTWINS
MATCH (Floor)-[r:contains|isAssociatedWith]->(Cafe)<-[has|includes*..3]-(Room)
WHERE Floor.$dtId = 'thermostat-15' AND r.length = 10 AND Cafe.temperature = 55
È anche possibile usare condizioni di relazione concatenati per esprimere relazioni bidirezionali. La query seguente trova i gemelli Floor, Room e Building, dove...
- la relazione tra Building e Floor soddisfa queste condizioni:
- la relazione è da sinistra a destra, con Building come origine e Floor come destinazione
- la relazione ha il nome 'isAssociatedWith'
- alla relazione viene assegnata una variabile di query
r1
- la relazione tra Floor e Room soddisfa queste condizioni:
- la relazione è da destra a sinistra, con Room come origine e Floor come destinazione
- la relazione ha il nome 'isAssociatedWith'
- alla relazione viene assegnata una variabile di query
r2
La query specifica inoltre che l'edificio gemello ha un $dtId
valore "building-3" e Room ha una temperatura superiore a 50.
SELECT Floor, Room, Building FROM DIGITALTWINS
MATCH (Building)-[r1:isAssociatedWith]->(Floor)<-[r2:isAssociatedWith]-(Room)
WHERE Building.$dtId = 'building-3' AND Room.temperature > 50
Limiti
I limiti seguenti si applicano alle query che usano MATCH
:
Per ogni istruzione di query è supportata una
MATCH
sola espressione.$dtId
è obbligatorio nellaWHERE
clausola .L'assegnazione di una variabile di query alla relazione è supportata solo quando la query specifica un singolo hop.
Gli hop massimi supportati in una query sono 10.
Le query MATCH che contengono
$dtId
filtri su qualsiasi gemello diverso dal gemello iniziale per l'attraversamento MATCH possono mostrare risultati vuoti. Ad esempio, la query seguente è soggetta a questa limitazione:SELECT A, B, C FROM DIGITALTWINS MATCH A-[contains]->B-[is_part_of]->C WHERE B.$dtId = 'Device01'
Se lo scenario richiede l'uso
$dtId
in altri dispositivi gemelli, prendere in considerazione l'uso della clausola JOIN.Le query MATCH che attraversano più volte lo stesso gemello possono rimuovere in modo imprevisto questo gemello dai risultati.