2张表(产品表 和产品宣传图表),根据产品找到产品的主宣传图。
SQL:
SELECT P .*, ( SELECT INNER_TAB.usepic FROM (
SELECT SAP.attpic_name usepic,ROWNUM RN_
FROM T_CLSH_ATTPIC SAP
WHERE SAP.prod_id = P .prod_id
AND SAP.is_use = '1'
AND SAP.is_del = '0'
ORDER BY
SAP.ATTPIC_ID DESC
) INNER_TAB
WHERE
INNER_TAB.RN_ = 1
) usepic
FROM
T_CLSH_PROD P
在本地环境 windows  oracle 10G下能够正常运行。
放到 linux oracle11G 执行报错.
错误:[Err] ORA-00904: "P"."PROD_ID": invalid identifier。
百度了下有人说是子查询带上主表的别名层数太深导致,还是说oracle11g不支持,
不知道这个问题该如何解决,要做配置还是只能通过更改sql(项目涉及这样的写法还有很多处)
请教各位!

解决方案 »

  1.   

    我也刚看了oracle官方文档,马的,果然是11G不支持双层嵌套子查询。
      

  2.   

    这种写法不支持,可以的话你可以在子查询中再放一个T_CLSH_PROD 表,或者换其他方式
      

  3.   

    我用max来代替rownum=1 这种情况,减少一层子查询
    SELECT P .*, (SELECT max(SAP.attpic_name) usepic
    FROM T_CLSH_ATTPIC SAP
    WHERE SAP.prod_id = P .prod_id
    AND SAP.is_use = '1'
    AND SAP.is_del = '0') usepic
    FROM
    T_CLSH_PROD P
      

  4.   

    我尝试了一下,为什么我的可以跑?也是 hp-ux的服务器,11g的版本,两层select可以没问题
      

  5.   

    我的三层都支持,也是11g啊,不知道为啥SELECT P.*,
           (select *
              from (SELECT INNER_TAB.created
                      FROM (SELECT tt.created, ROWNUM RN_ FROM lhb.test1 tt) INNER_TAB
                     WHERE INNER_TAB.RN_ = 1)
             where created > sysdate - 5) usepic
      FROM lhb.test P