mysql - 使用另一个 XML 数据在 XML 中搜索

标签 mysql sql sql-server xml select

我有那两个表:

表 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/

相关文章:

php - 选择框,在 WordPress 中使用自定义字段和自定义帖子类型对帖子进行排序?

php - 通过 Doctrine Symfony 框架在现有数据库中添加列

PHP 到 XML - 替换/修剪特殊字符

sql - 传递一个对象(.net 或 json 对象)作为 postgresql 函数的输入参数

sql-server - T-SQL 查询更新空值

mysql - 如何使用like查询来搜索其中包含%的列值?

sql - 将一个数字附加到列中的所有值

python - 无法使用 pyodbc 连接到 Azure SQL Server

sql - SOLID 存储过程和函数

php - 使用 PHP 数组的 SQL 搜索