0

我正在尝试执行此查询以在 db-visualizer 中获得一些结果,但我不断收到以下响应:

回应

[错误代码:907,SQL 状态:42000] ORA-00907:缺少右括号

编辑 查询:

SELECT * FROM (
    SELECT 
    e.*, clt_add_l1, clt_add_l2, clt_city, clt_prst_cd, clt_pszp_cd 
    FROM     Staging.db_&tablename_v._match e,  client.clt_address ca, client.clt_add_usg au 
    WHERE    substr(match_desc,1,2) = '00' 
    and e.clt_ofc_no=au.clt_ofc_no(+) 
    and e.clt_no=au.clt_no(+) 
    and au.clt_ofc_no=ca.clt_ofc_no(+) 
    and au.clt_add_key=ca.clt_add_key(+) 
    and au.clt_add_type(+)='PRI' 
    UNION ALL
    SELECT 
    e.*, clt_add_l1, clt_add_l2, clt_city, clt_prst_cd, clt_pszp_cd 
    FROM     Staging.db_&tablename_v._match e,  staging.clt_address_cp au 
    WHERE    substr(match_desc,1,2) in ('01','02') 
    and e.namadd_no = au.namadd_no(+) 
) foo ORDER BY match_desc, seq_no;
4

4 回答 4

1

采用:

   SELECT e.*, clt_add_l1, clt_add_l2, clt_city, clt_prst_cd, clt_pszp_cd, match_desc, seq_no
     FROM Staging.db_&tablename_v._match e 
LEFT JOIN client.clt_add_usg au ON au.clt_ofc_no = e.clt_ofc_no
                               AND au.clt_no = e.clt_no 
                               AND au.clt_add_type = 'PRI' 
LEFT JOIN client.clt_address ca ON ca.clt_ofc_no = au.clt_ofc_no
                               AND ca.clt_add_key = au.clt_add_key 
    WHERE substr(match_desc,1,2) = '00'
    UNION ALL
   SELECT e.*, clt_add_l1, clt_add_l2, clt_city, clt_prst_cd, clt_pszp_cd, match_desc, seq_no
     FROM Staging.db_&tablename_v._match e
LEFT JOIN staging.clt_address_cp au ON au.namadd_no = e.namadd_no
    WHERE substr(match_desc,1,2) IN ('01','02') 
 ORDER BY match_desc, seq_no

不需要派生表/内联视图。但是不清楚被排序的列是否已经在查询中(IE:e.*),所以我明确地将它们添加到最后。

我重新编写了查询以使用 ANSI-92 连接语法——您的查询使用了很久以来不推荐使用的外部连接方式。

我没有你的数据库和表。确定问题的最简单方法是缩减查询,直到它开始返回数据。然后,逐一添加条件(列、表、WHERE/etc 子句),看看哪里出了问题。

于 2013-01-16T14:12:27.287 回答
0

使用任一:

substr(match_desc,1,2) in ('00') 

或者

substr(match_desc,1,2) = '00' 
于 2013-01-16T14:11:03.717 回答
0

我猜你的 GUI 没有取代

Staging.db_&tablename_v._match

适当地。试试这个:

select 'Staging.db_&tablename_v._match' from dual;

结果是什么?我猜它离开表名就像

Staging.db_whatever._match

而不是预期的

Staging.db_whatever_match
于 2013-01-16T14:18:31.493 回答
0

问题是&tablename_v。需要删除,并且应该在适当位置插入表名(即 DATES)。我试过了,它奏效了。

但是谢谢大家的帮助!非常感谢:)

于 2013-04-27T14:48:29.217 回答