我有两个表,其中一个是容器,另一个是项目。 我想找到一个项目然后找到包含该特定项目的所有容器。 我有查询,但它只会找到一个容器。它的所有XML都使它变得有点复杂。
(我在xml里面的table1中搜索,然后当我找到我想要的东西时,我从col获取guid然后使用我在table1中找到的guid在table12 xml中搜索)
表1
Guid | Name | t1XML
1 n1 file1
2 n2 file2
表2
Guid | Name | t2XML
7 n7 cont7
9 n9 cont9
** guids是普通的guids(36 char)
这就是我所拥有的
DECLARE @searchFor NVARCHAR(max)=N'context'
SELECT t1.Name as itemName, t1.Guid, t2.Name
FROM table1 AS t1
JOIN table2 AS t2 ON t2.t2XML.query('/t/n').value('.', 'VARCHAR(36)')= CAST(t1.Guid as varchar(36))
WHERE t1.t1XML.exist(N'/t/am[text()[1]=sql:variable("@searchFor")]')=1 order by t2.Name
所以我想要的是,当我从t1找到一个具有' context'的项目时,我希望连接迭代到t2并查找具有该项目的所有容器。
答案 0 :(得分:0)
我能够弄清楚这一点
DECLARE @searchFor NVARCHAR(max)=N'context'
SELECT DISTINCT t2.Name , t2.Guid , filtered.Name
FROM table2 AS t2
JOIN (
SELECT DISTINCT t1.Name, lower(t1.Guid) as t1GUid
FROM table1 AS t1
WHERE t1.t1XML.exist(N'/t/am[text()[1]=sql:variable("@searchFor")]')=1
) AS filtered
ON t2.t2XML.exist(N'/t/n[text()[1]=sql:column("filtered.t1Guid")]')=1