提取不同的字段和表ORACLE R12表

时间:2014-02-28 06:49:09

标签: oracle toad

我有加入Oracle r12表的表的问题。我尝试过这样的事情......

SELECT
     part.party_name,
     custA.account_number,
     headAll.cust_po_number,
     headAll.order_number,
     trans.NAME,
     headAll.ordered_date,
     sales.person_name,
     headAll.flow_status_code,
     items.segment1,
     lineAll.ordered_quantity,
     lineAll.order_quantity_uom,
     lineAll.unit_selling_price,
     lineAll.tax_code
FROM
     oe_order_headers_all headAll,
     oe_order_lines_all lineAll,
     hz_cust_accounts custA,
     hz_parties part,
     oe_transaction_types_tl trans,
     hz_person_profiles sales,
     mtl_system_items_b items
WHERE
     headAll.Header_ID       = lineAll.Header_ID
 AND custA.Application_ID    = part.Application_ID
 AND custA.Application_ID    = sales.Application_ID
 AND items.inventory_item_id = lineAll.inventory_item_id;

它正在运行,但我知道这是错误的,因为它正在增加表格。在Oracle中r12表的任何想法并结合这个示例r12表?

-oe_order_headers_all 
-oe_order_lines_all
-hz_cust_accounts
-hz_parties
-oe_transaction_types_tl
-hz_person_profiles
-mtl_system_items_b

我试过这个..

更新:

 from oe_order_headers_all headAll
 INNER JOIN
 oe_order_lines_all lineAll
 ON headAll.Header_ID = lineAll.Header_ID
 INNER JOIN
 hz_cust_accounts custA 
 ON headAll.sold_to_org_id = custA.cust_account_id
 INNER JOIN
 hz_parties part
 ON custA.party_id = part.party_id 
 INNER JOIN
 oe_transaction_types_tl trans
 ON headAll.order_type_id = trans.transaction_type_id
 INNER JOIN
 hz_person_profiles sales 
 ON part.party_id = sales.party_id
 INNER JOIN
 mtl_system_items_b items 
 ON items.inventory_item_id = lineAll.inventory_item_id

我试图在哪个条款

 where headAll.Header_ID = lineAll.Header_ID AND headAll.order_type_id = trans.transaction_type_id  AND custA.party_id = part.party_id 
 AND part.party_id = sales.party_id AND headAll.sold_to_org_id = custA.cust_account_id AND items.inventory_item_id = lineAll.inventory_item_id;

仍在倍增..

2 个答案:

答案 0 :(得分:2)

忘了拥有Oracle R12套件。通常,任何Oracle引擎都会表现得像这样。 让我向您展示一些例子。

TABLE A
- COL1 PK1
- COL2 PK1
- COL3

TABLE B
- COL4 PK2
- COL5 PK2
- COL6

TABLE C
- COL7 
- COL8 -PK3
- COL9 -PK3

在这个模型中,每当我们加入任何表,除非你加入他们的键组合或基于任何给定行的规则,你从另一个表中检索最多一行。

SELECT A.COL1
FROM   TABLEA, TABLEB
WHERE  COL1 = COL4
AND    COL2 = COL5; 

ANSI语法中的OR

SELECT A.COL1
FROM   TABLEA 
JOIN TABLEB ON COL1 = COL4 AND COL2 = COL5; 

所以这可以扩展到第三个表格。

SELECT A.COL1
FROM   TABLEA, TABLEB, TABLEC
WHERE  COL1 = COL4
AND    COL2 = COL5
AND    COL1 = COL8
AND    COL2 = COL9; 

PS:假设两个表上的组合主键总是为另一个表提供一行。

您需要扩展ON子句以包含条件,以便对于表A中的每个条目,表B中只有一个条目与条件匹配,而对于表B中的每个条目,表C中只有一个条目

您可以随时尝试逐个连接表并保持查询构建,直到并且除非您违反了拇指规则(如上所述)。

如果我在执行相同的条件时更改了连接条件并且任何表重复,则相同的内容将传播到后续连接。

答案 1 :(得分:0)

表之间没有任何关系。别名 trans 根本不相关, headAll,lineAll,items custA,part,sales 组分开。在这种情况下,行将使用默认cross join加入。

在WHERE子句中添加条件:

AND headAll.order_type_id = trans.transaction_type_id

AND headAll.sold_to_org_id = custA.cust_account_id

请参阅Oracle教程中的此示例:Query to get the OM Sales Order summary details