0

我正在使用旧应用程序上的 oracle 数据库,并且无法为其提出特定查询。

基本上我有一个带有数字列(主键)和 xmltype 列的表 T_Selected。XML 的格式为

<countries>
    <country>England</country>
    <country>Ireland</country>
    <country>Scotland</country>
    <country>Wales</country>
</countries>

我还有另一个表需要查询并使用结果

select country from T_Countries where language = 'English'

我需要三个查询及其否定。

  1. xml ∈ 子查询中的所有国家

  2. 子查询 ∈ xml 中的所有国家

  3. xml 中的所有国家 = 所有子查询

我得到的最接近的是

select id from 
        T_Selected ts, 
        XMLTABLE('/countries/country'                  
                 passing ts.Values        
                 columns                                     
                 Country  path '//country'
                ) XML
        where XML.country in (select country from T_Countries 
                                                  where language ='English');

这将返回子查询中任何 xml 国家/地区的 ID,而不是所有国家/地区的 ID。

关于我如何解决这个问题的任何想法?

谢谢您的帮助,

尼尔

4

1 回答 1

0
  1. SUB 的 XML 子集 select id from (select id from T_Selected ts, XMLTABLE('/countries/country' 传递 ts.Values 列 Country path '//country' ) XML) xml RIGHT OUTER join (select country from T_Countries where language =' English') SUB) SUB.country=xml.country 上的 SUB,其中 XML.country 不为空;

  2. XML 的 SUB 子集 select xml.id from (select id from T_Selected ts, XMLTABLE('/countries/country' 传递 ts.Values 列 Country path '//country' ) XML) q1 LEFT OUTER join (select country from T_Countries where language ='English') SUB.country=xml.country 上的 SUB ) q2.country=q1.country 上的 q2 其中 q2.countyid 不为空;

  3. UNION XML 和 SUB 选择 id, country from T_Selected ts, XMLTABLE('/countries/country' 传递 ts.Values 列 Country path '//country') XML UNION ALL 选择 id, country from T_Countries where language ='English') SUB在 SUB.country=xml.country 上;

于 2013-05-28T00:25:21.747 回答