Azure Digital Twins sorgu dili başvurusu: MATCH yan tümcesi
Bu belge, Azure Digital Twins sorgu dilinin MATCH yan tümcesine ilişkin başvuru bilgilerini içerir.
MATCH
yan tümcesi, FROM yan tümcesinin bir parçası olarak Azure Digital Twins sorgu dilinde kullanılır.
MATCH
, Azure Digital Twins grafında ilişkiler arasında geçiş yaparken hangi desenin izlenmesi gerektiğini belirtmenize olanak tanır (bu, "değişken atlama" sorgu deseni olarak da bilinir).
Sorgu sırasında bu yan tümce isteğe bağlıdır.
Çekirdek söz dizimi: KAÇINCI
MATCH
, belirli ilişki koşullarına bağlı olarak atlama aralığındaki ikizler arasında yol bulan tüm sorguları destekler.
İlişki koşulu aşağıdaki ayrıntılardan birini veya daha fazlasını içerebilir:
- İlişki yönü (soldan sağa, sağdan sola veya yönsüz)
- ilişki adı (tek ad veya olasılık listesi)
- Bir ikizden diğerine "atlama" sayısı (tam sayı veya aralık)
- Sorgu metnindeki ilişkiyi temsil eden bir sorgu değişkeni ataması . Bu, ilişki özelliklerine filtre uygulamanıza da olanak sağlar.
Yan tümcesi olan bir MATCH
sorgu, başvuruda bulunduğu ikizlerden en az birinin belirtilmesi $dtId
için WHERE yan tümcesini de kullanmalıdır.
Not
MATCH
, sorgu deposunda gerçekleştirilebilecek tüm JOIN
sorguların üst kümesidir.
Sözdizimi
Temel söz dizimi aşağıdadır MATCH
.
Bu yer tutucuları içerir:
-
twin_or_twin_collection
(x2): Yan tümcesiMATCH
tek bir ikizi temsil etmek için bir işlenen gerektirir. Diğer işlenen başka bir tek ikizi veya bir ikiz koleksiyonunu temsil edebilir. -
relationship_condition
: Bu alanda, ikizler veya ikiz koleksiyonları arasındaki ilişkiyi açıklayan bir koşul tanımlayın. Koşul ilişki yönünü belirtebilir, ilişki adını belirtebilir, atlama sayısını belirtebilir, ilişki özelliklerini belirtebilir veya bu seçeneklerin herhangi bir bileşimini belirtebilir. -
twin_ID
: Burada, işlenenlerden birinin tek bir$dtId
ikizi temsil edebilmesi için ikiz koleksiyonlarından birinin içinde bir belirtin.
--SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[relationship_condition]-(twin_or_twin_collection_2)
WHERE twin_or_twin_collection.$dtId = 'twin_ID'
-- AND ...
Herhangi bir ikizin bu noktada çalışmasına izin vermek için ikiz koleksiyonlarından birini boş bırakabilirsiniz.
Ayrıca, birden çok zincirleme ilişki koşuluna veya hiçbir ilişki koşuluna sahip olmak için ilişki koşullarının sayısını değiştirebilirsiniz:
--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'
İlişki koşulunun her türü ve bunların nasıl birleştirildiği hakkında daha fazla bilgi için bu belgenin diğer bölümlerine bakın.
Örnek
Burada kullanan örnek bir sorgu verilmiştir MATCH
.
Sorgu bir ilişki yönü belirtir ve Yapı ve Algılayıcı ikizlerini arar.
- Algılayıcı, Bina21'i olan bir Bina ikizinden gelen herhangi bir
$dtId
ilişki tarafından hedeflenmiştir ve - Algılayıcının sıcaklığı 50'nin üzerindedir. Hem Bina hem de Algılayıcı sorgu sonucuna dahil edilir.
SELECT Building, Sensor FROM DIGITALTWINS
MATCH (Building)-[]->(Sensor)
WHERE Building.$dtId = 'Building21' AND Sensor.temperature > 50
İlişki yönünü belirtme
İkizler arasında bir ilişki yönü belirtmek için yan tümcesindeki MATCH
ilişki koşulunu kullanın. Olası yönler soldan sağa, sağdan sola veya yönlü olmayan yönlerdendir. Döngüsel ilişkiler otomatik olarak algılanır, böylece bir ilişki yalnızca bir kez geçirilir.
Not
Zincirleme kullanarak çift yönlü ilişkileri temsil etmek mümkündür.
Sözdizimi
Not
Bu bölümdeki örnekler ilişki yönüne odaklanır. İlişki adlarını belirtmez, varsayılan olarak tek bir atlama olarak ayarlanır ve ilişkilere sorgu değişkenleri atamaz. Bu diğer koşullarla daha fazlasını yapma yönergeleri için bkz . İlişki adını belirtme, Atlama sayısını belirtme ve İlişkiye sorgu değişkeni atama. Bunların birkaçını aynı sorguda birlikte kullanma hakkında bilgi için bkz . KAÇINCI işlemlerini birleştirme.
Yönlü ilişki açıklamaları, ilişkinin yönünü belirtmek için bir okun görsel gösterimini kullanır. Ok, isteğe bağlı bir ilişki adı için köşeli ayraç ([]
) ile ayrılmış bir boşluk içerir.
Bu bölümde, ilişkilerin farklı yönleri için söz dizimi gösterilir. Değerlerinizle değiştirilmesi gereken yer tutucu değerleri ve target_twin_or_twin_collection
şeklindedirsource_twin_or_twin_collection
.
Soldan sağa ilişki için aşağıdaki söz dizimini kullanın.
-- SELECT ... FROM ...
MATCH (source_twin_or_twin_collection)-[]->(target_twin_or_twin_collection)
-- WHERE ...
Sağdan sola ilişki için aşağıdaki söz dizimini kullanın.
-- SELECT ... FROM ...
MATCH (target_twin_or_twin_collection)<-[]-(source_twin_or_twin_collection)
-- WHERE ...
Yönlü olmayan bir ilişki için aşağıdaki söz dizimini kullanın. Bu, ilişki için bir yön belirtmez, bu nedenle herhangi bir yöndeki ilişkiler sonuçta eklenir.
-- SELECT ... FROM ...
MATCH (source_twin_or_twin_collection)-[]-(target_twin_or_twin_collection)
-- WHERE ...
İpucu
Yönlü olmayan sorgular ek işleme gerektirir ve bu da gecikme süresi ve maliyetin artmasına neden olabilir.
Örnekler
İlk örnekte soldan sağa yönlü dolaşma gösterilmektedir. Bu sorgu İkizler Oda ve Fabrika bulur nerede...
- Room targets Factory (herhangi bir ilişki adıyla)
- Oda 50'den büyük bir sıcaklık değerine sahiptir
- Fabrika '
$dtId
ABC'
SELECT Room, Factory FROM DIGITALTWINS MATCH (Room)-[]->(Factory)
WHERE Room.temperature > 50 AND Factory.$dtId = 'ABC'
Not
MATCH geçişi için başlangıç ikizi dışında herhangi bir ikizde filtre içeren $dtId
MATCH sorguları boş sonuçlar gösterebilir. Bu, yukarıdaki örnekte geçerlidir factory.$dtId
. Daha fazla bilgi için bkz . Sınırlamalar.
Aşağıdaki örnekte sağdan sola yönlü geçiş gösterilmektedir. Bu sorgu yukarıdakine benzer, ancak Room ile Factory arasındaki ilişkinin yönü tersine çevrilir. Bu sorgu İkizler Oda ve Fabrika bulur nerede...
- Fabrika hedefi Oda (herhangi bir ilişki adıyla)
- Fabrika '
$dtId
ABC' - Oda 50'den büyük bir sıcaklık değerine sahiptir
SELECT Room, Factory FROM DIGITALTWINS MATCH (Room)<-[]-(Factory)
WHERE Factory.$dtId = 'ABC' AND Room.temperature > 50
Aşağıdaki örnekte, yönlü olmayan bir geçiş gösterilmektedir. Bu sorgu İkizler Oda ve Fabrika bulur nerede...
- Oda ve Fabrika, her iki yönde de devam eden herhangi bir ilişki adını paylaşır
- Fabrika '
$dtId
ABC' - Oda 70'ten büyük bir nem değerine sahiptir
SELECT Factory, Room FROM DIGITALTWINS MATCH (Factory)-[]-(Room)
WHERE Factory.$dtId ='ABC' AND Room.humidity > 70
İlişki adını belirtin
İsteğe bağlı olarak, yan tümcesindeki ilişki koşulunu MATCH
kullanarak ikizler arasındaki ilişkilerin adlarını belirtebilirsiniz. Tek bir ad veya olası adların listesini belirtebilirsiniz. İsteğe bağlı ilişki adı, ilişki yönünü belirtmek için ok söz diziminin bir parçası olarak eklenir.
bir ilişki adı sağlamazsanız, sorgu varsayılan olarak tüm ilişki adlarını içerir.
İpucu
Sorguda ilişki adlarının belirtilmesi performansı geliştirebilir ve sonuçları daha öngörülebilir hale getirir.
Sözdizimi
Not
Bu bölümdeki örnekler ilişki adına odaklanır. Hepsi yönlü olmayan ilişkileri gösterir, varsayılan olarak tek bir atlama kullanır ve ilişkilere sorgu değişkenleri atamaz. Bu diğer koşullarla daha fazlasını yapma yönergeleri için bkz . İlişki yönünü belirtme, Atlama sayısını belirtme ve İlişkiye sorgu değişkeni atama. Bunların birkaçını aynı sorguda birlikte kullanma hakkında bilgi için bkz . KAÇINCI işlemlerini birleştirme.
Köşeli ayraçlar ()[]
içinde yan tümcesinde MATCH
çapraz geçiş için bir ilişkinin adını iki nokta üst üste (:
sonra) belirtin. Bu bölümde, adlandırılmış ilişkileri belirtmenin söz dizimi gösterilir.
Tek bir ad için aşağıdaki söz dizimini kullanın. Değerlerinizle değiştirilmesi gereken yer tutucu değerleri , relationship_name
ve twin_or_twin_collection_2
şeklindedirtwin_or_twin_collection_1
.
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[:relationship_name]-(twin_or_twin_collection_2)
-- WHERE ...
Birden çok olası ad için aşağıdaki söz dizimini kullanın. Değerlerinizle değiştirilmesi gereken yer tutucu değerleri , , relationship_name_option_1
relationship_name_option_2
, twin_or_twin_collection_2
ve notlarıdır twin_or_twin_collection_1
ve girmek istediğiniz ilişki adı sayısı için desene gerektiği gibi devam etmek için not olur.
-- 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 ...
Önemli
Köşeli ayraçların içindeki iki nokta üst üste (:
), sorguda ilişki adı belirtmek için söz diziminin gerekli bir MATCH
parçasıdır. İki nokta üst üste eklemezseniz, sorgunuz bir ilişki adı belirtmez. Bunun yerine, ilişkiye bir sorgu değişkeni atayan bir sorgunuz vardır.
(Varsayılan) Adı belirtilmemiş olarak bırakmak için köşeli ayraçları ad bilgilerinden boş bırakın, örneğin:
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[]-(twin_or_twin_collection_2)
-- WHERE ...
Örnekler
Aşağıdaki örnekte tek bir ilişki adı gösterilmektedir. Bu sorgu, yapı ve algılayıcı ikizlerini bulur.
- Bina, Algılayıcı ile 'içerir' ilişkisine sahiptir (her iki yönde de devam eden)
- Bina '
$dtId
Seattle21'
SELECT Building, Sensor FROM DIGITALTWINS
MATCH (Building)-[:contains]-(Sensor)
WHERE Building.$dtId = 'Seattle21'
Aşağıdaki örnekte birden çok olası ilişki adı gösterilmektedir. Bu sorgu yukarıdakine benzer, ancak sonuçta yer alan birden çok olası ilişki adı vardır. Bu sorgu, yapı ve algılayıcı ikizlerini bulur.
- Bina, Algılayıcı ile 'contains' veya 'isAssociatedWith' ilişkisine sahiptir (iki yönde de devam eder)
- Bina '
$dtId
Seattle21'
SELECT Building, Sensor FROM DIGITALTWINS
MATCH (Building)-[:contains|isAssociatedWith]-(Sensor)
WHERE building.$dtId = 'Seattle21'
Aşağıdaki örnekte belirtilen ilişki adı yok. Sonuç olarak, herhangi bir adla ilişkiler sorgu sonucuna eklenir. Bu sorgu, yapı ve algılayıcı ikizlerini bulur.
- Bina, Algılayıcı ile herhangi bir ada sahip bir ilişkiye sahiptir (ve her iki yönde de devam edecek)
- Bina '
$dtId
Seattle21'
SELECT Building, Sensor FROM DIGITALTWINS
MATCH (Building-[]-(Sensor)
WHERE Building.$dtId = 'Seattle21'
Atlama sayısını belirtme
İsteğe bağlı olarak, yan tümcesindeki ilişki koşulunu MATCH
kullanarak ikizler arasındaki ilişkilerin atlama sayısını belirtebilirsiniz. Tam bir sayı veya aralık belirtebilirsiniz. bu isteğe bağlı değer, ilişki yönünü belirtmek için ok söz diziminin bir parçası olarak eklenir.
Bir dizi atlama sağlamazsanız, sorgu varsayılan olarak bir atlama olur.
Önemli
Birden fazla atlama belirtirseniz, ilişkiye bir sorgu değişkeni atayamazsınız. Bu koşullardan yalnızca biri aynı sorgu içinde kullanılabilir.
Sözdizimi
Not
Bu bölümdeki örnekler atlama sayısına odaklanır. Bunların tümü, ad belirtmeden yönlü olmayan ilişkileri gösterir. Bu diğer koşullarla daha fazlasını yapma yönergeleri için bkz . İlişki yönünü belirtme ve İlişki adını belirtme. Bunların birkaçını aynı sorguda birlikte kullanma hakkında bilgi için bkz . KAÇINCI işlemlerini birleştirme.
Köşeli ayraçlar ([]
) içindeki yan tümcesinde MATCH
çapraz geçiş için atlama sayısını belirtin.
Tam atlama sayısını belirtmek için aşağıdaki söz dizimini kullanın. Değerlerinizle değiştirilmesi gereken yer tutucu değerleri , number_of_hops
ve twin_or_twin_collection_2
şeklindedirtwin_or_twin_collection_1
.
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[*number_of_hops]-(twin_or_twin_collection_2)
-- WHERE ...
Atlama aralığını belirtmek için aşağıdaki söz dizimini kullanın. Değerlerinizle değiştirilmesi gereken yer tutucu değerleri , starting_limit
ending_limit
ve twin_or_twin_collection_2
şeklindedirtwin_or_twin_collection_1
. Başlangıç sınırı, bitiş sınırı dahil edilirken aralığa dahil değildir.
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[*starting_limit..ending_limit]-(twin_or_twin_collection_2)
-- WHERE ...
Ayrıca bitiş sınırını "en fazla olan her şeyi" (ve dahil) belirtmek için başlangıç sınırını dışarıda bırakabilirsiniz. Her zaman bir bitiş sınırı sağlanmalıdır.
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[*..ending_limit]-(twin_or_twin_collection_2)
-- WHERE ...
(Varsayılan) Varsayılan olarak bir atlama olarak, köşeli ayraçları atlama bilgilerinden boş bırakın, örneğin:
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[]-(twin_or_twin_collection_2)
-- WHERE ...
Örnekler
Aşağıdaki örnek tam atlama sayısını belirtir. Sorgu yalnızca ikizler Floor ve Room arasında tam olarak 3 atlamalı ilişkiler döndürür.
SELECT Floor, Room FROM DIGITALTWINS
MATCH (Floor)-[*3]-(Room)
WHERE Floor.$dtId = 'thermostat-15'
Aşağıdaki örnek bir atlama aralığını belirtir. Sorgu, ikizler Floor ve Room arasında 1 ile 3 atlama (atlama sayısının 2 veya 3 olduğu anlamına gelir) arasındaki ilişkileri döndürür.
SELECT Floor, Room FROM DIGITALTWINS
MATCH (Floor)-[*1..3]-(Room)
WHERE Floor.$dtId = 'thermostat-15'
Ayrıca, yalnızca bir sınır sağlayarak bir aralığı gösterebilirsiniz. Aşağıdaki örnekte sorgu, floor ve room ikizleri arasında en fazla 2 atlama (atlama sayısı 1 veya 2 anlamına gelir) arasındaki ilişkileri döndürür.
SELECT Floor, Room FROM DIGITALTWINS
MATCH (Floor)-[*..2]-(Room)
WHERE Floor.$dtId = 'thermostat-15'
Aşağıdaki örnekte belirtilen sayıda atlama olmadığından, ikizler Floor ve Room arasında varsayılan olarak bir atlama olur.
SELECT Floor, Room FROM DIGITALTWINS
MATCH (Floor)-[]-(Room)
WHERE Floor.$dtId = 'thermostat-15'
İlişkiye sorgu değişkeni atama (ve ilişki özelliklerini belirtme)
İsteğe bağlı olarak, sorgu değişkenine sorgu metninde ada göre başvurabilmek için yan tümcesinde MATCH
başvuruda bulunan ilişkiye atayabilirsiniz.
Bunu yapmanın yararlı bir sonucu, yan tümcenizdeki WHERE
ilişki özelliklerine filtre uygulama yeteneğidir.
Önemli
İlişkiye bir sorgu değişkeni atamak yalnızca sorgu tek bir atlama belirttiğinde desteklenir. Sorguda, ilişki değişkeni belirtme ve daha fazla atlama belirtme arasında seçim yapmanız gerekir.
Sözdizimi
Not
Bu bölümdeki örnekler, ilişkinin sorgu değişkenine odaklanır. Bunların tümü, ad belirtmeden yönlü olmayan ilişkileri gösterir. Bu diğer koşullarla daha fazlasını yapma yönergeleri için bkz . İlişki yönünü belirtme ve İlişki adını belirtme. Bunların birkaçını aynı sorguda birlikte kullanma hakkında bilgi için bkz . KAÇINCI işlemlerini birleştirme.
İlişkiye bir sorgu değişkeni atamak için değişken adını köşeli ayraçlara ([]
) yerleştirin. Aşağıda gösterilen ve değerlerinizle değiştirilmesi gereken yer tutucu değerleri , relationship_variable
ve twin_or_twin_collection_2
şeklindedirtwin_or_twin_collection_1
.
-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[relationship_variable]-(twin_or_twin_collection_2>)
-- WHERE ...
Örnekler
Aşağıdaki örnekte ilişkiye bir 'Rel' sorgu değişkeni atanır. Daha sonra yan tümcesinde WHERE
, Rel ilişkisinin 'child' değerine sahip bir ad özelliğine sahip olması gerektiğini belirtmek için değişkenini kullanır.
SELECT Floor,Cafe, Rel DIGITALTWINS
MATCH (Floor)-[Rel]-(Cafe)
WHERE Floor.$dtId = 'thermostat-15' AND Rel.name = 'child'
KAÇINCI işlemlerini birleştirme
Aynı sorguda birden çok ilişki koşulunu birleştirebilirsiniz. Ayrıca, çift yönlü ilişkileri veya diğer daha büyük birleşimleri ifade etmek için birden çok ilişki koşulunu zincirleyebilirsiniz.
Sözdizimi
Tek bir sorguda ilişki yönünü, ilişki adını ve atlama sayısı veya sorgu değişkeni atamalarından birini birleştirebilirsiniz.
Aşağıdaki söz dizimi örnekleri, bu özniteliklerin nasıl birleştirilebileceğini gösterir. Ayrıca, koşulun bu bölümünü atlayan yer tutucularda gösterilen isteğe bağlı ayrıntıların herhangi birini de dışarıda bırakabilirsiniz.
Tek bir sorguda ilişki yönünü, ilişki adını ve atlama sayısını belirtmek için, ilişki koşulu içinde aşağıdaki söz dizimini kullanın. Değerlerinizle değiştirilmesi gereken yer tutucu değerleri ve twin_or_twin_collection_1
, twin_or_twin_collection_2
optional_left_angle_bracket
ve optional_right_angle_bracket
, relationship_name(s)
ve number_of_hops
olur.
-- 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
Tek bir sorgudaki ilişkinin ilişki yönünü, ilişki adını ve sorgu değişkenini belirtmek için, ilişki koşulu içinde aşağıdaki söz dizimini kullanın. Değerlerinizle değiştirilmesi gereken yer tutucu değerleri ve twin_or_twin_collection_1
, twin_or_twin_collection_2
optional_left_angle_bracket
ve optional_right_angle_bracket
, relationship_variable
ve relationship_name(s)
olur.
-- 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
Not
İlişki yönünü belirtme seçeneklerine göre, soldan sağa ilişki için sol açılı ayraç veya sağdan sola ilişki için sağ açılı ayraç arasında seçim yapmak gerekir. Her ikisini de aynı oka ekleyemezsiniz, ancak zincirleme yoluyla çift yönlü ilişkileri temsil edebilirsiniz.
Bunun gibi birden çok ilişki koşullarını birbirine zincirleyebilirsiniz. Değerleriniz ile değiştirilmesi gereken yer tutucu değerleri, tüm , ve örnekleridirtwin_or_twin_collection_1
relationship_condition
.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'
Örnekler
İlişki yönü, ilişki adı ve atlama sayısını birleştiren bir örnek aşağıda verilmiştir. Aşağıdaki sorgu, Floor ve Room arasındaki ilişkinin şu koşulları karşıladığı floor ve room ikizlerini bulur:
- ilişki soldan sağa, floor kaynak ve Oda hedef olarak
- ilişkinin adı 'contains' veya 'isAssociatedWith'
- İlişkide 4 veya 5 atlama var
Sorgu ayrıca ikiz Floor değerinin $dtId
'thermostat-15' olduğunu belirtir.
SELECT Floor, Room FROM DIGITALTWINS
MATCH (Floor)-[:contains|isAssociatedWith*3..5]->(Room)
WHERE Floor.$dtId = 'thermostat-15'
İlişkinin yönü, ilişki adı ve adlandırılmış sorgu değişkenini birleştiren bir örnek aşağıda verilmiştir. Aşağıdaki sorgu, Floor ve Room arasındaki ilişkinin bir sorgu değişkenine r
atandığı ve bu koşulları karşıladığı floor ve room ikizlerini bulur:
- ilişki soldan sağa, floor kaynak ve Oda hedef olarak
- ilişkinin adı 'contains' veya 'isAssociatedWith'
- sorgu değişkeni
r
verilen ilişki, 10'a eşit bir uzunluk özelliğine sahiptir
Sorgu ayrıca ikiz Floor değerinin $dtId
'thermostat-15' olduğunu belirtir.
SELECT Floor, Room FROM DIGITALTWINS
MATCH (Floor)-[r:contains|isAssociatedWith]->(Room)
WHERE Floor.$dtId = 'thermostat-15' AND r.length = 10
Aşağıdaki örnekte zincirlenmiş ilişki koşulları gösterilmektedir. Sorgu, floor, cafe ve room ikizlerini bulur; burada...
- Kat ve Oda arasındaki ilişki şu koşulları karşılar:
- ilişki soldan sağa, Floor kaynak, Cafe ise hedef olarak
- ilişkinin adı 'contains' veya 'isAssociatedWith'
- sorgu değişkeni
r
verilen ilişki, 10'a eşit bir uzunluk özelliğine sahiptir
- Cafe ve Room arasındaki ilişki şu koşulları karşılar:
- ilişki sağdan sola, Oda kaynak ve Cafe hedef olarak
- ilişkinin adı 'has' veya 'includes'
- ilişkide en fazla 3 (yani 1, 2 veya 3) atlama vardır
Sorgu ayrıca ikiz Floor değerinin $dtId
'thermostat-15' olduğunu ve ikiz Cafe'nin sıcaklığı 55 olduğunu belirtir.
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
Çift yönlü ilişkileri ifade etmek için zincirlenmiş ilişki koşullarını da kullanabilirsiniz. Aşağıdaki sorgu ikizleri bulur Floor, Room ve Building, where...
- Bina ile Kat arasındaki ilişki şu koşulları karşılar:
- ilişki soldan sağa, kaynak olarak Bina ve hedef olarak Floor'dır
- ilişkinin adı 'isAssociatedWith'
- ilişkiye bir sorgu değişkeni verilir
r1
- Kat ve Oda arasındaki ilişki şu koşulları karşılar:
- ilişki sağdan sola, Oda kaynak ve Floor hedef olarak
- ilişkinin adı 'isAssociatedWith'
- ilişkiye bir sorgu değişkeni verilir
r2
Sorgu ayrıca ikiz Bina'nın $dtId
'building-3' ve Room'un 50'den büyük bir sıcaklığa sahip olduğunu belirtir.
SELECT Floor, Room, Building FROM DIGITALTWINS
MATCH (Building)-[r1:isAssociatedWith]->(Floor)<-[r2:isAssociatedWith]-(Room)
WHERE Building.$dtId = 'building-3' AND Room.temperature > 50
Sınırlamalar
Aşağıdaki sınırlar kullanan MATCH
sorgular için geçerlidir:
Sorgu deyimi başına yalnızca bir
MATCH
ifade desteklenir.$dtId
yan tümcesindeWHERE
gereklidir.İlişkiye bir sorgu değişkeni atamak yalnızca sorgu tek bir atlama belirttiğinde desteklenir.
Sorguda desteklenen en fazla atlama sayısı 10'dur.
MATCH geçişi için başlangıç ikizi dışında herhangi bir ikizde filtre içeren
$dtId
MATCH sorguları boş sonuçlar gösterebilir. Örneğin, aşağıdaki sorgu bu sınırlamaya tabidir:SELECT A, B, C FROM DIGITALTWINS MATCH A-[contains]->B-[is_part_of]->C WHERE B.$dtId = 'Device01'
Senaryonuz diğer ikizlerde kullanmanızı
$dtId
gerektiriyorsa bunun yerine JOIN yan tümcesini kullanmayı göz önünde bulundurun.Aynı ikizi birden çok kez geçen MATCH sorguları beklenmedik şekilde bu ikizi sonuçlardan kaldırabilir.