我有两个表,一个是容器,另一个是项目。 我想找到一个项目,然后找到包含该特定项目的所有容器。 我有查询,但它只会找到一个容器。全部都是 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
** guid 是普通的 guid(36 个字符)
这就是我所拥有的
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 中找到具有“上下文”的项目时,我希望联接迭代到 t2 并找到具有该项目的所有容器。
最佳答案
我能够弄清楚这样做
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
关于mysql - 迭代 JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48502589/