连接表中两个不同行的字符串

Posted

技术标签:

【中文标题】连接表中两个不同行的字符串【英文标题】:concatenating strings from two different rows in a table 【发布时间】:2010-03-22 17:40:02 【问题描述】:

我们正在尝试重新设计产品中的 SQL。该产品将 XML 存储在一个表中,如下所示:

XML_STORAGE
- UID IDENTITY
- PARENT_ID INTEGER
- SEQ INTEGER
- XML VARCHAR(3800)

目前的做法如下:

检索 PARENT_ID = n 的所有 ROWS。然后检查代码中提取的行,在解析之前将 XML 字符串连接成一个大的 XML。 SEQ 列用于对结果进行排序,以便可以正确连接 XML 字符串。希望这很清楚。

我们试图做的是对其进行重新设计,以便我们可以使用 SQL 变体来检索整个字符串并从 DB2 中取回一行。是否有一个 DB2 函数允许我们将所有这些行中的字符串连接成结果集中的一个大字符串。这样的 SQL 看起来如何。请告诉我。非常感谢任何帮助。

谢谢! - 阿齐姆

【问题讨论】:

【参考方案1】:

检查 DB2 中的递归查询,如提到的here

【讨论】:

Goran,很遗憾,我不能使用公用表表达式或递归查询,因为我们需要支持 DB2 z.OS v8 CM(有效的 DB2 v7)。看起来 DB2 v7 不支持公用表表达式语法。 :( 没有那个版本来测试它,但是 v7 SQL 参考 ftp.software.ibm.com/ps/products/db2/info/vr7/pdf/letter/… 说你可以。 pdf第1341页上的示例(啊,IBM手册的4位页码:)) Goran,感谢您指出这一点。我没有意识到 v7 支持它。我会试一试。再次感谢!【参考方案2】:

是的,有。锁定XMLELEMENTXMLAGGXMLSERIALIZE。这应该对大多数人有用。您可以在以下问题中看到一个示例Output a DB2 SQL XML query to a unique XML file

编辑:

你为什么不做类似select '<tag1>', col1. '</tag1><tag2>', col2, '</tag2>' from table 的事情?如果您需要将所有行合并为一个而不是运行后处理以删除换行符。

【讨论】:

感谢彼得的信息。不幸的是,鉴于这是 DB2 v7,我们无法使用 XML 特定的 DB2 语法。 :(

以上是关于连接表中两个不同行的字符串的主要内容,如果未能解决你的问题,请参考以下文章

比较一个表中数组不同行的两个值Angular

在 Oracle PL/SQL 中,当列的其余值相等时,我可以交换表中两个不同行的同一列的值吗?

识别 2 个表中的不同行

MySQL:以特定顺序连接两个表的不同行?

如何使用 ssp.class.php 连接两个表

如何在准备好的语句php中的不同行中插入多条记录