1

使用 oracle SQL 开发人员,

我有两个具有不同列的视图。如何将第 1 列从视图 A 连接到视图 B?我想AR_INVOICE_INQ_V.CLI_NAME CLI_NAME从视图 B 加入视图 A。

查看 A

CREATE OR REPLACE FORCE VIEW "KPRD"."AC_INPUT_AUDIT" ("CLIENT", "SEQUENCE_CODE", "EMPLOYEE", "ORIGINAL_DATE", "HOURS_SPENT", "LONG_DESCRIPTION", "TIME_AT_ACTUAL", "MANAGER")
AS
  SELECT CLIENT,
    SEQUENCE_CODE,
    EMPLOYEE,
    ORIGINAL_DATE,
    HOURS_SPENT,
    LONG_DESCRIPTION,
    TIME_AT_ACTUAL,
    MANAGER
  FROM TIME_DETAILS
  WHERE MANAGER BETWEEN 'AAGG' AND 'AZJE'
  AND ORIGINAL_DATE    > '28/SEP/2012'
  AND TIME_AT_ACTUAL ! = 0;

视图 B

CREATE OR REPLACE FORCE VIEW "KPRD"."AC_AR_INV_BAL" ("CLIENT", "CLI_NAME", "PARTNER", "PAR_NAME", "MANAGER", "REFERENCE", "STATUS_CODE", "INVOICE_DATE", "TIME_BILLED", "GROUP_CLIENT_CODE", "GRPCLI_NAME", "INVOICE_BALANCE")
AS
  SELECT AR_INVOICE_INQ_V.CLIENT CLIENT,
    AR_INVOICE_INQ_V.CLI_NAME CLI_NAME,
    AR_INVOICE_INQ_V.PARTNER PARTNER,
    AR_INVOICE_INQ_V.PAR_NAME PAR_NAME,
    AR_INVOICE_INQ_V.MANAGER MANAGER,
    AR_INVOICE_INQ_V.REFERENCE REFERENCE,
    AR_INVOICE_INQ_V.STATUS_CODE STATUS_CODE,
    AR_INVOICE_INQ_V.INVOICE_DATE INVOICE_DATE,
    AR_INVOICE_INQ_V.TIME_BILLED TIME_BILLED,
    AR_INVOICE_INQ_V.GROUP_CLIENT_CODE GROUP_CLIENT_CODE,
    AR_INVOICE_INQ_V.GRPCLI_NAME GRPCLI_NAME,
    AR_INVOICE_INQ_V.INVOICE_BALANCE
  FROM AR_INVOICE_INQ_V
  WHERE MANAGER BETWEEN 'AAGG' AND 'AZGG';
4

2 回答 2

0

为了加入column 1from view Ainto view B,表或视图都必须具有column 1. 如果AR_INVOICE_INQ_V.CLI_NAME CLI_NAME要从view B入入view AView A必须要有栏目CLI_NAME。否则,您无法基于CLI_NAME列进行连接。

于 2012-10-24T16:51:45.957 回答
0

连接视图的语法与表的相同。我不完全确定您要实现的目标,但我认为您想要 view 中的所有列和 view中的A另外一列B。假设CLIENT这两种语法都有一个共同的价值,就像:

SELECT AIA.CLIENT,
    AIA.SEQUENCE_CODE,
    AIA.EMPLOYEE,
    AIA.ORIGINAL_DATE,
    AIA.HOURS_SPENT,
    AIA.LONG_DESCRIPTION,
    AIA.TIME_AT_ACTUAL,
    AIA.MANAGER,
    AAIB.CLI_NAME
FROM AC_INPUT_AUDIT AIA
JOIN AC_AR_INV_BAL AAIB ON AAIB.CLIENT = AIA.CLIENT;

这似乎假设两个视图中的记录之间存在一对一的关系,这似乎不太可能,特别是因为MANAGER过滤器不同。因此,您可能会得到与预期不同的一组结果,可能存在重复和/或缺失记录。外连接可能会解决这个问题,但也可能会使情况变得更糟,因此您需要更清楚视图之间的关系以及您想要实现的目标。

如果您可以访问基础表,您可能会发现加入这些表的性能更高,但您可能需要两种方式都对其进行测试。

于 2012-10-24T17:01:22.370 回答