1

我正在尝试从我的银行管理员那里获取所有 IFSC 代码和详细信息(银行唯一代码),它以输入的 IFSC 代码的前 4 个字符开头。我有银行主表,其中包括 IFSC 代码(4 个字符),相应的银行详细信息。

查询的主要部分如下所示。

AND D.IFSC_CODE=UPPER(substr(B.BANK_CODE,1,4)) (+) ORDER BY....

当我执行此查询时,我收到一条错误消息“ORA-00936:缺少表达式”。

我对查询的期望是:

  • 如果银行存在于输入的 IFSC 代码对应的银行主文件中,则返回详细信息
  • 否则只有输入的 IFSC 应该显示

当我重写查询时

AND D.IFSC_CODE(+) =UPPER(substr(B.BANK_CODE,1,4)) ORDER BY....

没有错误,但结果不是我所期望的。

我该如何解决这个问题?

4

1 回答 1

4

在复杂的外连接表达式中,您可以将(+)运算符放在所有相关列上,如下所示:

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 
于 2011-01-18T09:00:43.457 回答