ORA-00918: 未明确定义列

SELECT *
  FROM (SELECT TMP.*, ROWNUM ROW_ID
          FROM (SELECT T.ID,
                       T.APPLY_PER,
                       T.APPLY_STATUS,
                       T.APPROVE_PER,
                       T.APPROVE_TIME,
                       T.TAKE_DOWN_PER,
                       T.TAKE_DOWN_TIME,
                       T.SEAL_PER,
                       T.SEAL_TIME,
                       U.REALNAME,
                       AUS.REALNAME,
                       TU.REALNAME,
                       SU.REALNAME
                  FROM SPV_VOUCHER_BORROW_APPLY T
                  LEFT JOIN SYS_USER U
                    ON T.APPLY_PER = U.ID
                  LEFT JOIN SYS_USER AUS
                    ON T.APPROVE_PER = AUS.ID
                  LEFT JOIN SYS_USER TU
                    ON T.APPROVE_PER = TU.ID
                  LEFT JOIN SYS_USER SU
                    ON T.APPROVE_PER = SU.ID
                 
                 ORDER BY T.APPLY_BEGIN_TIME DESC, T.ID ASC, T.ID ASC) TMP
         WHERE ROWNUM <= 10)
 WHERE ROW_ID > 0

这种SQL 容易出现未明确定义列的情况,因为3个realname,正确的做法应该是

SELECT *
  FROM (SELECT TMP.*, ROWNUM ROW_ID
          FROM (SELECT T.ID,
                       T.APPLY_PER,
                       T.APPLY_BEGIN_TIME,
                       T.APPLY_STATUS,
                       T.APPROVE_PER,
                       T.APPROVE_TIME,
                       T.TAKE_DOWN_PER,
                       T.TAKE_DOWN_TIME,
                       T.SEAL_PER,
                       T.SEAL_TIME,
                       U.REALNAME AS "U.realname",
                       AUS.REALNAME  AS "AUS.realname",
                       TU.REALNAME  AS "tu.realname",
                       SU.REALNAME  AS "su.realname"
                  FROM SPV_VOUCHER_BORROW_APPLY T
                  LEFT JOIN SYS_USER U
                    ON T.APPLY_PER = U.ID
                  LEFT JOIN SYS_USER AUS
                    ON T.APPROVE_PER = AUS.ID
                  LEFT JOIN SYS_USER TU
                    ON T.APPROVE_PER = TU.ID
                  LEFT JOIN SYS_USER SU
                    ON T.APPROVE_PER = SU.ID
                 ORDER BY T.APPLY_BEGIN_TIME DESC, T.ID ASC, T.ID ASC) TMP
         WHERE ROWNUM <= 10)
 WHERE ROW_ID > 0

给3个同名列定义不同名字

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值