Oracle join无法正常工作

我正在尝试从我的银行主机获取所有IFSC代码和详细信息(银行唯一代码),它以输入的IFSC代码的前4个字符开头。我有银行主表,其中包括IFSC代码(4个字符),相应的银行详细信息。 查询的主要部分如下。
AND D.IFSC_CODE=UPPER(substr(B.BANK_CODE,1,4)) (+) ORDER BY....
当我执行此查询时,我收到一条错误消息“ORA-00936:missing expression”。 我对查询的期望是: 如果银行存在于与输入的IFSC代码对应的银行主数据中,则返回详细信息 否则只有进入IFSC应该显示 当我重写查询时
AND D.IFSC_CODE(+) =UPPER(substr(B.BANK_CODE,1,4)) ORDER BY....
没有错误,但结果不是我的预期。 我该如何解决这个问题?     
已邀请:
在复杂的外连接表达式中,您可以将
(+)
运算符放在所有相关列上,如:
AND D.IFSC_CODE=UPPER(substr(B.BANK_CODE (+),1,4))
例如:
SQL> WITH table_a AS (
  2     SELECT '0001' ID FROM dual
  3     UNION ALL SELECT '0002' FROM dual
  4     UNION ALL SELECT '0003' FROM dual
  5  ), table_b AS (
  6     SELECT '0001a' ID FROM dual
  7     UNION ALL SELECT '0002b' FROM dual
  8  )
  9  SELECT a.id, b.id
 10    FROM table_a a, table_b b
 11   WHERE a.id = substr(b.id (+), 1, 4);

ID   ID
---- -----
0001 0001a
0002 0002b
0003 
这种外部联接形式特定于Oracle,并且可能比SQL ANSI外部联接更难以阅读。另外,使用这种旧方法禁用了一些特定功能(完全外连接,外连接到多个表)。在SQL ansi连接表单中,查询看起来像:
SQL> WITH table_a AS (
  2     SELECT '0001' ID FROM dual
  3     UNION ALL SELECT '0002' FROM dual
  4     UNION ALL SELECT '0003' FROM dual
  5  ), table_b AS (
  6     SELECT '0001a' ID FROM dual
  7     UNION ALL SELECT '0002b' FROM dual
  8  )
  9  SELECT a.id, b.id
 10    FROM table_a a
 11    LEFT OUTER JOIN table_b b ON a.id = substr(b.id, 1, 4);

ID   ID
---- -----
0001 0001a
0002 0002b
0003 
    

要回复问题请先登录注册