这很难复制。
具有这种模式的查询
Question
此错误失败
index
在这里很奇怪,这种模式很好用:
SELECT *
FROM table1 t1
LEFT
JOIN table2@myLink t2
ON t1.key_field = t2.key_field
LEFT
JOIN (SELECT a.*,
3 dummyField
FROM table3@myLink a
) t3
ON T1.key_key = t3.key_Field
AND t3.dummyfield =
( SELECT 3
FROM dual
);
有什么想法吗?到底发生了什么事?
此外,我在不同的环境中将这些表放在相同的模式中,并且第一个查询在没有数据库链接的情况下运行而没有错误。
答案 0 :(得分:0)
问题出现在最后一个条件,其中左侧操作数是列,而右侧操作数是外部联接查询的子查询:
AND t3.dummyfield = ( SELECT 3 FROM dual );
如果将此部分更改为:
WHERE t3.dummyfield = ( SELECT 3 FROM dual );
您的问题将得到解决。
您的工作查询将是:
SELECT *
FROM table1 t1
LEFT JOIN table2@myLink t2
ON t1.key_field = t2.key_field
LEFT JOIN
(SELECT a.*,3 dummyField
FROM table3@myLink a) t3
ON T1.key_key = t3.key_Field
WHERE t3.dummyfield = ( SELECT 3
FROM dual
);
PS:请注意,您的两个查询在第二个LEFT JOIN ON操作数上都有语法错误。
附注:请注意,您的第二个查询在JOIN (SELECT * FROM table2@myLink) t2
答案 1 :(得分:0)
以下内容摘自Oracle支持文档ID 2258768.1
我们不支持将列外部连接到子查询,因此ORA-1799是预期的行为。
但是当查询引用本地对象时,由于查询转换而导致错误地避免了ORA-1799。