Oracle 使用联接从表中提取数据时出错
MDW_CUSTOMER_ACCOUNTS表具有CUSTOMER_ID、ACCOUNT_ID和INVOICE_ID MDW_发票表具有发票ID、发票交易ID1、发票交易ID2、发票交易ID3 MDW_INVOICE_事务表具有INVOICE_事务ID、成本 我正在尝试使用查询从三个表中打印ACCOUNT_ID、COST1、COST2、COST3Oracle 使用联接从表中提取数据时出错,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
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,您应该看到该客户的所有帐户,无论它们是否处于非活动状态或没有发票。