Azure Digital Twins 查詢語言參考:JOIN 子句

本文件包含 Azure Digital Twins 查詢語言JOIN 子句相關參考資訊。

當您想要查詢以周遊 Azure Digital Twins 圖表時,請使用 Azure Digital Twins 查詢語言中的 JOIN 子句作為 FROM 子句的一部分。

查詢時,這個子句是選用性質。

由於 Azure Digital Twins 中的關聯性是數位對應項的一部分,而不是獨立的實體,因此在 JOIN 查詢中使用 RELATED 關鍵字來參照對應項集合中特定類型的關聯性集合 (類型的指定方式是使用關聯性 DTDL 定義中的 name 欄位)。 您可以在查詢中為關聯性集合指派一個集合名稱。

然後,查詢必須使用 WHERE 子句來指定要使用哪一個或哪些特定的對應項來支援此關聯性查詢,您可以篩選來源或目標對應項的 $dtId 值來完成此作業。

語法

--SELECT ...
FROM DIGITALTWINS <twin-collection-name>
JOIN <target-twin-collection-name> RELATED <twin-collection-name>.<relationship-name> <OPTIONAL: relationship-collection-name>
WHERE <twin-collection-name-OR-target-twin-collection-name>.$dtId = '<twin-id>'

範例

下列查詢會透過 contains 關聯性,選取與識別碼為 ABC 的對應項相關的所有數位對應項。

SELECT T, CT
FROM DIGITALTWINS T
JOIN CT RELATED T.contains
WHERE T.$dtId = 'ABC'

多個 JOIN

單一查詢最多支援五個 JOIN,這可讓您一次周遊多個層級的關聯性。

語法

--SELECT ...
FROM DIGITALTWINS <twin-collection-name>
JOIN <relationship-collection-name-1> RELATED <twin-collection-name>.<relationship-type-1>
JOIN <relationship-collection-name-2> RELATED <twin-or-relationship-collection-name>.<relationship-type-2>

範例

下列查詢是以包含 LightPanel 的 Room (會議室)為基礎,而每個 LightPanel 都包含數個 LightBulb。 此查詢會取得會議室 1 和 2 的 LightPanel 所含的所有 LightBulb。

SELECT LightBulb
FROM DIGITALTWINS Room
JOIN LightPanel RELATED Room.contains
JOIN LightBulb RELATED LightPanel.contains
WHERE Room.$dtId IN ['room1', 'room2']

限制

下列限制適用於使用 JOIN 的查詢。

如需詳細資訊,請參閱下列幾節。

深度限制為五

每個查詢的圖表周遊深度限制為五個 JOIN 層級。

範例

下列查詢說明 Azure Digital Twins 查詢中可能的 JOIN 子句數量上限。 它會取得 Building1 中的所有 LightBulb。

SELECT LightBulb
FROM DIGITALTWINS Building
JOIN Floor RELATED Building.contains
JOIN Room RELATED Floor.contains
JOIN LightPanel RELATED Room.contains
JOIN LightBulbRow RELATED LightPanel.contains
JOIN LightBulb RELATED LightBulbRow.contains
WHERE Building.$dtId = 'Building1'

不含 OUTER JOIN 語意

不支援 OUTER JOIN 語意,這表示如果關聯性的順位是零,則會從輸出結果集中排除整個「資料列」。

範例

請考慮說明建築物周遊的下列查詢。

SELECT Building, Floor
FROM DIGITALTWINS Building
JOIN Floor RELATED Building.contains
WHERE Building.$dtId = 'Building1'

如果 Building1 不包含任何樓層,則此查詢會傳回空的結果集 (而不是傳回一列資料顯示 Building (建築物) 的值和 Floor (樓層) 的 undefined)。

需要對應項

Azure Digital Twins 中的關聯性無法以獨立實體的形式來查詢;您還需要提供關聯性的來源對應項相關資訊。 此功能在 Azure Digital Twins 中會透過 RELATED 關鍵字,內含在預設的 JOIN 用法中。

此外,使用 JOIN 子句的查詢還必須依照 WHERE 子句中任何對應項的 $dtId 屬性進行篩選,以釐清要使用哪些對應項來支援關聯性查詢。