mysql - 迭代 JOIN

标签 mysql sql xml

我有两个表,一个是容器,另一个是项目。 我想找到一个项目,然后找到包含该特定项目的所有容器。 我有查询,但它只会找到一个容器。全部都是 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/

相关文章:

c# - 如何使用 UWP 连接到 mySQL 数据库

PHP PDO : Stored Procedure Return Empty Result

mysql - Wordpress 后期同步/发布到生产环境

php - 使用 PHP 类时的 SQL 查询效率

sql - 如何为这个特定的表关系建模

SQL SELECT 与 m :n relationship

android - 带有前缀和自闭标记的 XMLPullParser

mysql - SQL 查询约束返回 JOIN LEFT 表的列

java - BIRT 报告 : Web Service Data Source doesn't return data

c# - 非常慢的 WebResponse 触发超时