oracle - 提取不同字段和表 ORACLE R12 TABLES

标签 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子句

 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;

仍在增加..

最佳答案

忘掉 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 中只有一个条目

您始终可以尝试将表一个接一个地连接起来,并保持查询构建,直到并且除非您确实违反了拇指规则(如上所述)。

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

关于oracle - 提取不同字段和表 ORACLE R12 TABLES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22088218/

相关文章:

sql - 为什么这两个查询的性能差异如此之大?

sql - Oracle 自动提交

sql - SQL 中的聚合和(连接)

MySQL : using user-defined variables for a table name

sql - Oracle SQL 在电话号码中插入括号

sql - 日期数据类型的 Equals(=) 与 LIKE

java - 引用游标和直接 Java 代码之间的性能差异

SQLite:类似于 Oracle 解码或 MS "If"

sql - oracle中HUGECLOB的详细介绍

mysql - 升级到 ToadForMySQL 版本 7.2.0.2922,现在出现身份验证问题