使用连接从表中获取数据时出错

时间:2013-06-07 14:04:05

标签: oracle

MDW_CUSTOMER_ACCOUNTS表包含CUSTOMER_IDACCOUNT_IDINVOICE_ID

MDW_INVOICE表格包含INVOICE_IDINVOICE_TRANSACTIONID1INVOICE_TRANSACTIONID2INVOICE_TRANSACTIONID3

MDW_INVOICE_TRANSACTION表格有INVOICE_TRANSACTIONIDCOST

我正在尝试使用查询从三个表中打印ACCOUNT_IDCOST1COST2COST3

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”:标识符无效

3 个答案:

答案 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?
;