2013-05-20 4 views
0

Я работаю с оракулом db в устаревшем приложении и не могу найти конкретный запрос для него.Теория преформирования множества между столбцом xmltype и подзапросом

В принципе у меня есть одна таблица T_Selected с номером столбца (первичный ключ) и столбцом xmltype. 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. Subquery ∈ Все страны в XML

  3. Все страны в XML = ко всем подзапроса

Ближайший я получил

Это вернет идентификаторы, в которых любая из xml-стран находится в подзапросе, а не все из них.

Любые идеи о том, как я могу это сделать?

Спасибо за помощь,

Найл

ответ

0
  1. XML подмножеством SUB выберите идентификатор из (выберите идентификатор из T_Selected Т.С., XMLTABLE ('/ страны/страны' прохождение ts.Values ​​ columns Путь страны '// страна' ) XML) xml RIGHT OUTER join (выберите страну из T_Countries где language = 'English') SUB) SUB на SUB.country = xml.country где XML.country не равно null;

  2. SUB подмножество XML выберите xml.id из (выберите идентификатор из T_Selected Т.С., XMLTABLE ('/ стран/странами прохождения ts.Values ​​ колонны Страны пути '// страны' ) XML) q1 LEFT OUTER join (выберите страну из T_Countries где язык = 'английский') SUB на SUB.country = xml.country) q2 на q2.country = q1.country где q2.countyid не равно null;

  3. UNION XML и SUB выберите идентификатор, страна из T_Selected ц, XMLTABLE ('/ страны/страны прохождения ц.Значения столбцы Страна путь '// страна' ) XML UNION ALL выберите идентификатор, страна из T_Countries где язык = 'Английский') SUB на SUB.country = xml.country ;

+0

Hi Ed, Спасибо за ответ. Запросы все еще не совсем правильны, поскольку выбирают идентификатор из T_Selected ts, XMLTABLE ('/ countries/country', проходящий ts.Values ​​column Country path '// country') возвращает строку для каждой из стран. Это приводит к тому, что значения результата сохраняются, когда какая-либо из стран находится в подзапросе, а не все из них. – Niall