Oracle 使用联接从表中提取数据时出错

Oracle 使用联接从表中提取数据时出错,oracle,Oracle,MDW_CUSTOMER_ACCOUNTS表具有CUSTOMER_ID、ACCOUNT_ID和INVOICE_ID MDW_发票表具有发票ID、发票交易ID1、发票交易ID2、发票交易ID3 MDW_INVOICE_事务表具有INVOICE_事务ID、成本 我正在尝试使用查询从三个表中打印ACCOUNT_ID、COST1、COST2、COST3 SQL> SELECT a.account_id , to_number(i1.cost) , to_number(i2.cost) , to_n

MDW_CUSTOMER_ACCOUNTS表具有CUSTOMER_ID、ACCOUNT_ID和INVOICE_ID

MDW_发票表具有发票ID、发票交易ID1、发票交易ID2、发票交易ID3

MDW_INVOICE_事务表具有INVOICE_事务ID、成本

我正在尝试使用查询从三个表中打印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';
我得到以下错误

在b.invoice\u事务ID1上左连接mdw\u发票i1= i1.发票\交易ID *第5行错误:ORA-00904:I1.1发票\交易ID:无效标识符


表MDW_INVOICE没有名为INVOICE_TRANSACTIONID的列


正如您所说,它有INVOICE\u TRANSACTIONID1、INVOICE\u TRANSACTIONID2和INVOICE\u TRANSACTIONID3列。

表MDW\u INVOICE没有名为INVOICE\u TRANSACTIONID的列


正如您所说,它有INVOICE\u TRANSACTIONID1、INVOICE\u TRANSACTIONID2和INVOICE\u TRANSACTIONID3列。

最好不要混合使用符号

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

混合使用符号不是最好的主意

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?
;
尝试:

尝试:


仍然无法写入查询。。请help@debalNilo是正确的,您的加入不应该是mdw_发票b,而是mdw_客户_帐户,因为您将无法编写查询。。请help@debalNilo是正确的,您的加入不应该是mdw_发票b,而应该是mdw_客户_帐户。它只显示帐户id。当然,因为上面的select columns'子句中只要求这样做。您可以输入要查看的列的名称。这是您的选择…这只是显示帐户id。当然,因为它是上面select columns'子句中请求的所有内容。您可以输入要查看的列的名称。这是您的选择…这只给出一个帐户id的结果,但是mdw_customer_accounts_表可以为每个客户_id提供多个帐户。我需要检索该特定客户的所有值_Id@debal:如果删除和a.STATUS='ACTIVE'条件,并将JOIN mdw\u invoice更改为LEFT JOIN mdw\u invoice,您应该看到该客户的所有帐户,无论它们是否处于非活动状态或没有发票。这只会给出一个帐户id的结果,但是mdw_customer_accounts_表中每个客户id可以有多个帐户。我需要检索该特定客户的所有值_Id@debal:如果删除和a.STATUS='ACTIVE'条件,并将JOIN mdw\u invoice更改为LEFT JOIN mdw\u invoice,您应该看到该客户的所有帐户,无论它们是否处于非活动状态或没有发票。