如何解决ORA-00933:在子查询中,联接未正确结束SQL命令
|| 自上次执行Oracle SQL以来已经有一段时间了,希望有人能告诉我为什么我得到933: SELECT TRIM(A.ACCOUNTNUMBER) AS INDBDebnmbr,TRIM(A.VOUCHER) AS INinvoicenmbr,A.DATE_ AS INinvoiceDate,A.DUEDATE AS INinvoiceDueDate,A.TXT AS INDescription,A.EXCHANGECODE AS INCurrencyCode,subq.AMOUNTMST AS INOriginalamount,subq.SETTLEAMOUNTMST AS INpaidAmount,subq.OPENAMOUNT AS INOpenAmount
FROM (
SELECT DEBTRANS.VOUCHER AS VOUCHER,SUM(DEBTRANS.AMOUNTMST) AS AMOUNTMST,SUM(DEBTRANS.SETTLEAMOUNTMST) AS SETTLEAMOUNTMST,SUM(DEBTRANS.AMOUNTMST - DEBTRANS.SETTLEAMOUNTMST) AS OPENAMOUNT
FROM XAL_SUPERVISOR.DEBTRANS DEBTRANS
WHERE DEBTRANS.OPEN = 1 AND
DEBTRANS.TRANSTYPE <> 9 AND
(DEBTRANS.AMOUNTMST - DEBTRANS.SETTLEAMOUNTMST) <> 0 AND
DEBTRANS.DATASET = \'FIK\'
GROUP BY DEBTRANS.VOUCHER) subq INNER JOIN DEBTRANS A ON A.VOUCHER = subq.VOUCHER
在SQL Plus中
提前致谢,
麦可
解决方法
您对使用8i的评论进行了解释。在ANSI \ '92加入语法没有在Oracle中实现的,直到9i中。
您将需要修改查询:
SELECT TRIM(A.ACCOUNTNUMBER) AS INDBDebnmbr,TRIM(A.VOUCHER) AS INinvoicenmbr,A.DATE_ AS INinvoiceDate,A.DUEDATE AS INinvoiceDueDate,A.TXT AS INDescription,A.EXCHANGECODE AS INCurrencyCode,subq.AMOUNTMST AS INOriginalamount,subq.SETTLEAMOUNTMST AS INpaidAmount,subq.OPENAMOUNT AS INOpenAmount
FROM (
SELECT DEBTRANS.VOUCHER AS VOUCHER,SUM(DEBTRANS.AMOUNTMST) AS AMOUNTMST,SUM(DEBTRANS.SETTLEAMOUNTMST) AS SETTLEAMOUNTMST,SUM(DEBTRANS.AMOUNTMST - DEBTRANS.SETTLEAMOUNTMST) AS OPENAMOUNT
FROM XAL_SUPERVISOR.DEBTRANS DEBTRANS
WHERE DEBTRANS.OPEN = 1 AND
DEBTRANS.TRANSTYPE <> 9 AND
(DEBTRANS.AMOUNTMST - DEBTRANS.SETTLEAMOUNTMST) <> 0 AND
DEBTRANS.DATASET = \'FIK\'
GROUP BY DEBTRANS.VOUCHER) subq,DEBTRANS A
WHERE A.VOUCHER = subq.VOUCHER;
, 您要加入的DEBTRANS是XAL_SUPERVISOR.DEBTRANS的另一个实例吗?
如果是这样,请不要在子查询中使用DEBTRANS作为别名,这会造成混淆。将其更改为其他内容,然后重试,例如
SELECT TRIM(A.ACCOUNTNUMBER) AS INDBDebnmbr,subq.OPENAMOUNT AS INOpenAmount
FROM (
SELECT dt.VOUCHER AS VOUCHER,SUM(dt.AMOUNTMST) AS AMOUNTMST,SUM(dt.SETTLEAMOUNTMST) AS SETTLEAMOUNTMST,SUM(dt.AMOUNTMST - dt.SETTLEAMOUNTMST) AS OPENAMOUNT
FROM XAL_SUPERVISOR.DEBTRANS dt
WHERE dt.OPEN = 1 AND
dt.TRANSTYPE <> 9 AND
(dt.AMOUNTMST - dt.SETTLEAMOUNTMST) <> 0 AND
dt.DATASET = \'FIK\'
GROUP BY dt.VOUCHER) subq INNER JOIN DEBTRANS A ON A.VOUCHER = subq.VOUCHER
, 而不是最后一行
A.VOUCHER上的内部联接债务A = subq.VOUCHER
采用
A.VOUCHER上的内部联接债权人= subq.INinvoicenmbr
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。