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个同名列定义不同名字