簡體   English   中英

驗證xml節點是否具有給定值tsql的子節點

[英]verify that xml node has a child node with a given value tsql

我有以下表格

A (ID, relatedID, typeId )
B (ID, leftID, leftTypeId)

我想加入這樣的兩個表

select * from A
inner join B on A.TypeId=B.LeftTypeId and {condition}

where 條件應該驗證id, leftID將匹配來自relatedID的值,其中relatedId是xml列。 例如。 relatedID = <Id>1</Id>

有最佳方​​法嗎?

UPDATE relatedID可以包含多個ID。 例如,例如。 relatedID=<Id>1</Id><Id>2</Id>

你可以用

... and A.relatedID.value('(/Id[1]/text())[1]', 'int') = B.leftID

要么

... and A.relatedID.exist('(/Id[1]/text())[1] = sql:column("B.leftID")') = 1

雖然建議exist超過謂詞的value ,但取決於XML列是否為xml索引以及它具有哪種類型的索引,上述兩個中的一個可能表現更好。

UPD。 對於relatedID可以包含一組ID的情況,您可以嘗試

select ...
from A
    cross apply A.relatedID.nodes('/Id') r(id)
    inner join B on A.TypeId=B.LeftTypeId
        and r.id.value('text()[1]', 'int') = B.leftID

要么

select ...
from A
    cross apply A.relatedID.nodes('/Id') r(id)
    inner join B on A.TypeId=B.LeftTypeId
        and r.id.exist('text()[1]=sql:column("B.leftID")') = 1

甚至

select ...
from A
    inner join B on A.TypeId=B.LeftTypeId
        and A.relatedID.exist('/Id[text()[1]=sql:column("B.leftID")]') = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM