【问题标题】:JOIN 4 tables in one (Oracle R11)将 4 个表连接在一起 (Oracle R11)
【发布时间】:2017-09-22 16:45:42
【问题描述】:

我需要创建一个查询,显示我正在使用 Oracle R11 的“法律实体”、“应用程序名称”、“结束日期”和“期间”,现在我找到了

“法人实体”

SELECT name
FROM hr_organization_information HOI
INNER JOIN hr_all_organization_units HAOU
ON HOI.ORGANIZATION_ID = Haou.Organization_Id
WHERE HOI.org_information_context LIKE 'Legal Entity Accounting'
ORDER BY NAME ASC;

对于“申请名称、截止日期、期间”

SELECT A.APPLICATION_ID,
       B.APPLICATION_NAME,
       TO_CHAR(A.END_DATE,'HH24:MI DD-MON-YYYYI'),
       A.PERIOD_NUM
FROM GL_PERIOD_STATUSES A
INNER JOIN FND_APPLICATION_TL B ON A.APPLICATION_ID = B.APPLICATION_ID
WHERE A.Application_Id=101
  AND LANGUAGE='US'
  OR A.APPLICATION_ID=200
  AND LANGUAGE='US'
  OR A.APPLICATION_ID=222
  AND LANGUAGE='US';

单独但我还没有找到将它们加入一个查询的方法,你能帮我吗?

【问题讨论】:

  • 您需要确定这些表是否以 PK/FK 方式关联或通过其他表关联。您始终可以“交叉连接”结果,因此每个法人实体名称都与来自第二个查询的所有记录相关联;但我怀疑这就是你所追求的。由于一个查询中没有表匹配另一个;我们无法弄清楚如何让它们联系起来。也许人力资源组织以某种方式与 FND 应用程序相关联?或者它与 GL Periods 相关联?没有这些细节真的无济于事。 organization_IDApplication_ID 是否一起存在于同一张表中的某个地方?
  • 我会用它来检查两个列是否存在于同一个表中SELECT Table_name FROM ALL_TAB_COLS WHERE COLUMN_NAME in ('ORGANIZATION_ID', 'APPLICATION_ID') GROUP BY Table_name HAVING count(Distinct COLUMN_NAME) > 1 然后我会评估结果以确定哪些结果(如果有);最适合需要。如果这些都不起作用,那么您就没有直接关系,您必须查看 ERD 或依赖项,看看您是否可以找到一种方法来查看它们之间的关系。或询问系统架构师/参考现有源代码(ALL_SOURCE),看看您是否可以找到一种方法。
  • 只是猜测,但就像 xQbert 一样,我怀疑应用程序(在 FND_APPLICATION_TL 表中)是由组织单位(来自 HR_ALL_ORGANIZATION_UNITS)提交的。要么是这样,要么是由在一个单位工作的个人提交的申请——在这种情况下,您需要通过第五张表关联所有内容,也许是 EMPLOYEES。现在,顺便说一句:第二个查询中的 WHERE 子句可以简化为 where a.application_id in (101, 200, 222) and language = 'US')(您可能应该使用表别名来限定 language)。
  • 为了进一步帮助您,最好了解相关表中的一些列名。特别是如果您可以(通过列名)判断申请是由单位提交还是由其他人/其他人提交。从该表中的主键列开始,如果有的话。
  • 感谢大家,您的建议非常有用,我找到了答案。

标签: oracle join oracle11g erp


【解决方案1】:

Antonio,我认为 Brian 给了你中肯的建议。如果他的建议没有引导您找到答案,那么在 EBS 论坛(或任何应用程序)上发帖也可能是值得的。我会提供有时连接 table_A 和 table_B 的方法是通过 table_C。也就是说,如果您在对另一组中的一个表的查询中没有找到任何直接相关的数据,那么查看定义在这些表上的 FK 并指向这些表,看看您是否可以找到当前不属于的表与集合相关的任一查询。您弄清楚如何将当前的每个查询连接到它,这就是您将两个查询连接在一起的方式。

【讨论】:

    【解决方案2】:

    谢谢大家!

    大家给我的建议很有用,我发现表 HR_LEGAL_ENTITIES(表 C)有两列允许我将表 A 与表 B 连接起来,最终查询是:

    SELECT  HAOU.NAME, 
            FAT.APPLICATION_NAME, 
            TO_CHAR(GPS.END_DATE,'HH24:MI DD-MON-YYYY'), 
            GPS.PERIOD_NUM
    FROM    HR_ALL_ORGANIZATION_UNITS HAOU 
    INNER JOIN HR_LEGAL_ENTITIES HLE
    ON  HLE.ORGANIZATION_ID = HAOU.ORGANIZATION_ID
    INNER JOIN GL_PERIOD_STATUSES GPS
    ON HLE.SET_OF_BOOKS_ID = GPS.SET_OF_BOOKS_ID
    INNER JOIN  FND_APPLICATION_TL FAT
    ON GPS.APPLICATION_ID = FAT.APPLICATION_ID
    WHERE GPS.Application_Id IN (101,200,222) AND LANGUAGE='US'
    ORDER BY NAME ASC;
    
    Regards!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      • 2010-12-04
      相关资源
      最近更新 更多