【发布时间】:2020-12-01 10:17:35
【问题描述】:
我的一个数据库表有多个记录。在每条记录中都有一列存储以下类型的 XML。我需要编写一个查询,它应该获取父节点内的记录,如果任何子节点只包含值 0 完全。在这个例子中,第四个节点包含所有的 0。这满足条件,必须获取记录。我可以知道如何在 SQL 中编写这个条件来获取这样的数据吗?
注意:父节点可能包含多个子节点。
XML:
<videoDetails>
<video>
<V1>
<display>0</display>
</V1>
<V2>
<display>0</display>
</V2>
<V3>
<display>0</display>
</V3>
<V4>
<display>0</display>
</V4>
<V5>
<display>1</display>
</V5>
</video>
<video>
<V1>
<display>0</display>
</V1>
<V2>
<display>0</display>
</V2>
<V3>
<display>1</display>
</V3>
<V4>
<display>0</display>
</V4>
<V5>
<display>0</display>
</V5>
</video>
<video>
<V1>
<display>0</display>
</V1>
<V2>
<display>1</display>
</V2>
<V3>
<display>0</display>
</V3>
<V4>
<display>0</display>
</V4>
<V5>
<display>1</display>
</V5>
</video>
<video>
<V1>
<display>0</display>
</V1>
<V2>
<display>0</display>
</V2>
<V3>
<display>0</display>
</V3>
<V4>
<display>0</display>
</V4>
<V5>
<display>0</display>
</V5>
</video>
</videoDetails>
我尝试使用 NOT xmlexists('$N/../../../videoDetails/video[1]/*[display=1]' 将 USER_VIDEO_XML 传递为 "N") 之类的东西。这仅在 XML 包含一个全为 0 的节点且不适用于多个节点时才有效。
请求您的宝贵意见。
【问题讨论】:
-
XML 支持高度特定于供应商 - 所以请添加标签以指定您是否使用
mysql、postgresql、sql-server、oracle或db2- 或完全不同的东西。 -
您的 xPath 强制它只查看第一个
标签: sql xml db2 xquery-sql