我有那两个表:
表 1:
IDt1 | XML
1123 xml
1457 xml
表 2:
ID | Name | XML
01 A xml
02 B xml
我想在 table1 XML 中搜索,如果数据存在,则使用 IDt1 并在 table2 XML 中搜索它,如果存在,然后从 table2 返回 ID 和 Name 这是每个表的 XML。
表 1 xml:
<t>
<ts>
<sc>
<rn>445</rn>
<am>Name1</am>
</sc>
<sc>
<rn>555/rn>
<am>Name2</am>
</sc>
</ts>
</t>
表 2 xml:
<t>
<ts>
<d>
<n>01123</n>
</d>
<d>
<n>04344</n>
</d>
</ts>
</t>
我想要的数据:
ID | Name
01 a
我能够从表 1 中检索到包含我正在寻找的内容的 ID,但是我无法使用这些 ID 在其他 xml 中进行搜索。 这是我所拥有的:
SELECT IDt1 as table1IDs
FROM [Table1]
WHERE [XML].exist ('/t/ts/sc/am[contains(., "Name1")]') > 0
它返回一个包含 Name1 的 ID 表,现在问题是如何使用 ID 并在 table2 的 xml 中搜索它们,然后返回 table2 的名称和 ID 现在的问题是我必须使用不能接受变量的 xml.exist [contain table1IDs]
有办法吗?
最佳答案
你的解决方案非常接近,虽然我不会使用 LIKE
...你可以试试这个:
DECLARE @dummy1 TABLE(IDt1 INT, xml1 XML);
INSERT INTO @dummy1 VALUES
(1123,N'<t>
<ts>
<sc>
<rn>445</rn>
<am>Name1</am>
</sc>
<sc>
<rn>555</rn>
<am>Name2</am>
</sc>
</ts>
</t>')
,(1457,N'<t />'); --you provided only one example...
DECLARE @dummy2 TABLE(ID INT, [Name] VARCHAR(100), [XML] XML);
INSERT INTO @dummy2 VALUES
(1,'A',N'<t>
<ts>
<d>
<n>01123</n>
</d>
<d>
<n>04344</n>
</d>
</ts>
</t>')
,(2,'B',N'<t />'); --you provided only one example...
DECLARE @searchFor NVARCHAR(100)=N'Name1'
SELECT *
FROM @dummy1 AS t1
INNER JOIN @dummy2 AS t2 ON t2.[XML].exist(N'/t/ts/d/n[text()[1]=sql:column("t1.IDt1")]')=1
WHERE t1.xml1.exist(N'/t/ts/sc/am[text()[1]=sql:variable("@searchFor")]')=1
关于mysql - 使用另一个 XML 数据在 XML 中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47716533/