Oracle 加入两个 xmltables

Oracle join on two xmltables

试图将以下XML,

中的两件合二为一
<items>
  <item><a>a1</a><b>b1</b></item>
  <item><b>b2</b><a>a2</a></item>
  <item><a>a3</a><b>b3</b></item>
  <item><a>a4</a><b>b4</b></item>
  <item><a>a5</a><b>b5</b></item>
  <item><a>a6</a><b>b6</b></item>
</items>

我提出了这个解决方案:

select * from xmltable ( '/items/item[position() mod 2 = 0]' passing
    xmltype('
<items>
  <item><a>a1</a><b>b1</b></item>
  <item><a>a2</a><b>b2</b></item>
  <item><a>a3</a><b>b3</b></item>
  <item><a>a4</a><b>b4</b></item>
  <item><a>a5</a><b>b5</b></item>
  <item><a>a6</a><b>b6</b></item>
</items>') columns
  "id" for ordinality,
  "a" varchar2(10) path 'a',
  "b" varchar2(10) path 'b'
) x,
xmltable ( '/items/item[position() mod 2 = 1]' passing
    xmltype('
<items>
  <item><a>a1</a><b>b1</b></item>
  <item><b>b2</b><a>a2</a></item>
  <item><a>a3</a><b>b3</b></item>
  <item><a>a4</a><b>b4</b></item>
  <item><a>a5</a><b>b5</b></item>
  <item><a>a6</a><b>b6</b></item>
</items>') columns
  "id" for ordinality,
  "c" varchar2(10) path 'a',
  "d" varchar2(10) path 'b'
) y 
where x.id = y.id;

问题是它无法识别 ON 子句中的第二个 table:

ORA-00904: "Y"."ID": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error at Line: 29 Column: 18

让我很无助。我尝试了多个子查询,子查询中的子查询,但没有希望。

感谢您的帮助和指导。

您已经使用 quoted identifiers 创建了 XMLTable 列。您也需要引用参考文献:

where x."id" = y."id";

或者把列子句改成不加引号,这样更简单:

id for ordinality

...等等