在不知道您的表或 XML 文档的架构的情况下,我将不得不做出一些假设。但我认为这并不太难。首先,我将写出我所做的假设。如果这些假设是错误的,请纠正我。
您似乎有一个表,其中xml_content_key 应该是列名,xml_key 应该是行标识符。您在问题中只展示了非常有限的样本,但我的假设表明更多数据可能看起来像这样。
xml_type | xml_key | xml_content_key | xml_content_value
----------------------------------------------------------------------------------------------------
Archiv::144 | 144 | [1]{'Version'}[1]{'Carrier'}[1]{'Content'} | 151
Archiv::144 | 144 | [1]{'Version'}[1]{'CarrierID'}[1]{'Content'} | 5714141614
Archiv::144 | 144 | [1]{'Version'}[1]{'CustomerInterface'}[1]{'Content'} | 145
Archiv::144 | 145 | [1]{'Version'}[1]{'Carrier'}[1]{'Content'} | 123
Archiv::144 | 145 | [1]{'Version'}[1]{'CarrierID'}[1]{'Content'} | 4567891234
Archiv::144 | 145 | [1]{'Version'}[1]{'CustomerInterface'}[1]{'Content'} | 567
Archiv::144 | 146 | [1]{'Version'}[1]{'Carrier'}[1]{'Content'} | 891
Archiv::144 | 146 | [1]{'Version'}[1]{'CarrierID'}[1]{'Content'} | 2345678912
Archiv::144 | 146 | [1]{'Version'}[1]{'CustomerInterface'}[1]{'Content'} | 345
我认为您正在尝试编写一个查询来重新组织它。
+---------+---------+------------+-------------------+
| xml_key | Carrier | CarrierID | CustomerInterface |
+---------+---------+------------+-------------------+
| 144 | 151 | 5714141614 | 145 |
| 145 | 123 | 4567891234 | 567 |
| 146 | 891 | 2345678912 | 345 |
+---------+---------+------------+-------------------+
如果我对这部分有误,那么继续阅读是没有意义的。但如果到目前为止我是对的,那么我想强调一下你问题中的一句话。 p>
连接不适用,因为它位于单个表上。
您错过了 SQL 的一项重要功能:self joins 在这种情况下非常有用。
似乎每个xml_key(或行)都有三个“内容键”(或列)。我们会将共享相同xml_key 的所有xml_content_key 连接在一起,这样每一行将描述一个xml_key。顺便说一句,我假设您的表名为 xml_storage。
SELECT xs1.xml_key AS 'xml_key',
xs1.xml_content_value AS 'Carrier',
xs2.xml_content_value AS 'CarrierID',
xs3.xml_content_value AS 'CustomerInterface'
FROM xml_storage xs1
INNER JOIN xml_storage xs2 ON xs2.xml_key = xs1.xml_key
INNER JOIN xml_storage xs3 ON xs3.xml_key = xs1.xml_key
WHERE xs1.xml_content_key LIKE "%[1]{'Version'}[1]{'Carrier'}[1]{'Content'}%"
AND xs2.xml_content_key LIKE "%[1]{'Version'}[1]{'CarrierID'}[1]{'Content'}%"
AND xs3.xml_content_key LIKE "%[1]{'Version'}[1]{'CustomerInterface'}[1]{'Content'}%"
这里的基本思想是我们将表格分成三个表格,然后将它们重新组合在一起。我们将运营商放在 xs1 中,将 CarrierID 放在 xs2 中,将 CustomerInterfaces 放在 xs3 中。然后我们将它们重新组合在一起,将与特定 xml_key 关联的所有内容放在同一行。
您可能需要更改它以适合您的实际架构。特别是,此查询假定每个唯一 xml_key 恰好有一个 Carrier、CarrierID 和 CustomerInterface。我相信,如果您的数据与我一直假设的一样,但不完善,这种通用方法将有效data 需要比我在此处给出的示例更强大的查询。
如果您可以分享有关您的特定架构的更多详细信息,我很乐意编辑我建议的查询以适合您的情况。