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
...等等
试图将以下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
...等等