一个sql语句出了问题,麻烦大神给看一下啊,

问题描述:

sql语句
select dd.* from (
select distinct rp.apply_id
from t_r_p rp
where rp.r_status != 1
and rp.apply_id not in(select di.apply_id
from t_d_i di
where di.deduct_type in (1, 2, 3)
and di.deduct_status = 3)
and rp.END_DATE < to_date('2017-07-24','yyyy-mm-dd')
)a
wher rownum <= 500 )dd where dd.rn>0 ;

在Oracle中执行报错:
SQL Error [933] [42000]: ORA-00933: SQL command not properly ended

java.sql.SQLSyntaxErrorException: ORA-00933: SQL命令没有正确结束

到底那个不对了?审查了好几遍,还是错误

肯定不对啊,首先,括号不对等,)a对应的集合的select不存在,其次500后面的括号是中文的,最后dd.rn>0,dd如果结果集来自rp,那么rp表中只有一个字段是aaply_id,a表字段补齐,并且查询集合rp中要包含a查询的字段 ,如下:
select dd.* from (
    select 字段 from (
        select distinct rp.apply_id,rp.字段
        from t_r_p rp
        where rp.r_status != 1
        and rp.apply_id not in(
            select di.apply_id from t_d_i di 
            where di.deduct_type in (1, 2, 3) 
            and di.deduct_status = 3
        )
        and rp.END_DATE < to_date('2017-07-24','yyyy-mm-dd')
    )a 
where rownum <= 500 
)dd 
where dd.字段>0 ;

在PLSQL中 执行一下,写错的地方回报红提示

 SELECT
    dd.*
FROM
    ((------------------加了一个括号
        SELECT DISTINCT
            rp.apply_id
        FROM
            t_r_p rp
        WHERE
            rp.r_status != 1
        AND rp.apply_id NOT IN (
            SELECT
                di.apply_id
            FROM
                t_d_i di
            WHERE
                di.deduct_type IN (1, 2, 3)
            AND di.deduct_status = 3
        )
        AND rp.END_DATE < to_date ('2017-07-24', 'yyyy-mm-dd')
    ) a where rownum <= 500 )dd-----------------中文括号改成英文括号
WHERE
    dd.rn > 0;

他说SQL命令没有正确结束可能就是多一个括号或者少一个括号之类的

这种情况 就是括号的问题 好好检查一下 就会发现

检查“)a”与“)dd”前面对应的部分就知道了。

and di.deduct_status = 3)

多了个括号

不是,是少了前部的东西
SELECT dd.* FROM(SELECT a.* FROM ( select distinct rp.apply_id