MDW_CUSTOMER_ACCOUNTS
表包含CUSTOMER_ID
,ACCOUNT_ID
和INVOICE_ID
MDW_INVOICE
表格包含INVOICE_ID
,INVOICE_TRANSACTIONID1
,INVOICE_TRANSACTIONID2
,INVOICE_TRANSACTIONID3
MDW_INVOICE_TRANSACTION
表格有INVOICE_TRANSACTIONID
,COST
我正在尝试使用查询从三个表中打印ACCOUNT_ID
,COST1
,COST2
,COST3
SQL> SELECT a.account_id , to_number(i1.cost) , to_number(i2.cost) , to_number(i3.cost)
2 FROM mdw_customer_accounts a,
3 mdw_invoice b,
4 mdw_invoice_transaction c
5 LEFT JOIN mdw_invoice i1 ON b.INVOICE_TRANSACTIONID1 = i1.INVOICE_TRANSACTIONID
6 LEFT JOIN mdw_invoice i2 ON b.INVOICE_TRANSACTIONID2 = i2.INVOICE_TRANSACTIONID
7 LEFT JOIN mdw_invoice i3 ON b.INVOICE_TRANSACTIONID3 =i3.INVOICE_TRANSACTIONID
8 WHERE a.customer_id='CUS0031' and a.invoice_id=b.invoice_id and a.STATUS='ACTIVE';
我收到以下错误
LEFT JOIN mdw_invoice i1 ON b.INVOICE_TRANSACTIONID1 = i1.INVOICE_TRANSACTIONID *第5行的错误:ORA-00904:“I1”。“INVOICE_TRANSACTIONID”:标识符无效
答案 0 :(得分:3)
表MDW_INVOICE没有名为INVOICE_TRANSACTIONID的列。
如你所说,它有列INVOICE_TRANSACTIONID1,INVOICE_TRANSACTIONID2和INVOICE_TRANSACTIONID3。
答案 1 :(得分:2)
尝试:
SELECT a.account_id, to_number(i1.cost), to_number(i2.cost), to_number(i3.cost)
FROM mdw_customer_accounts a
JOIN mdw_invoice b ON a.invoice_id=b.invoice_id
LEFT JOIN mdw_invoice_transaction i1
ON b.INVOICE_TRANSACTIONID1 = i1.INVOICE_TRANSACTIONID
LEFT JOIN mdw_invoice_transaction i2
ON b.INVOICE_TRANSACTIONID2 = i2.INVOICE_TRANSACTIONID
LEFT JOIN mdw_invoice_transaction i3
ON b.INVOICE_TRANSACTIONID3 =i3.INVOICE_TRANSACTIONID
WHERE a.customer_id='CUS0031' and a.STATUS='ACTIVE';
答案 2 :(得分:0)
混合符号并不是最佳选择。
CREATE TABLE MDW_CUSTOMER_ACCOUNTS(
CUSTOMER_ID NUMBER, ACCOUNT_ID NUMBER, INVOICE_ID NUMBER
);
CREATE TABLE MDW_INVOICE(
INVOICE_ID NUMBER, INVOICE_TRANSACTIONID1 NUMBER, INVOICE_TRANSACTIONID2 NUMBER, INVOICE_TRANSACTIONID3 NUMBER
);
CREATE TABLE MDW_INVOICE_TRANSACTION (
INVOICE_TRANSACTIONID NUMBER, COST NUMBER
);
SELECT a.account_id --, to_number(i1.cost) , to_number(i2.cost) , to_number(i3.cost) -- there is no cost column in mdw_invoice table
FROM mdw_customer_accounts a
JOIN mdw_invoice b ON a.invoice_id = b.invoice_id
-- JOIN mdw_invoice_transaction c -- join on what??? Cartesian join???
LEFT JOIN mdw_invoice i1 ON b.INVOICE_TRANSACTIONID1 = i1.INVOICE_TRANSACTIONID1 -- <---- number at the end
LEFT JOIN mdw_invoice i2 ON b.INVOICE_TRANSACTIONID2 = i2.INVOICE_TRANSACTIONID2 -- <---- number at the end
LEFT JOIN mdw_invoice i3 ON b.INVOICE_TRANSACTIONID3 = i3.INVOICE_TRANSACTIONID3 -- <---- number at the end
WHERE a.customer_id='CUS0031'
-- AND a.STATUS='ACTIVE'; -- where is status column?
;