Oracle SQL加入两个表/视图以避免跨产品

时间:2017-08-08 09:21:31

标签: sql oracle microsoft-query

我正在尝试正确加入两个表/视图。它们是V_ARINVOICE_ALLV_GLBATCH_AR_COGS。下图中的第三个表V_ARINVOICE_ALL仅用于补充说明。

Click Here

我目前正在返回错误的行数,因为我认为这是一种交叉连接。我正在尝试加入Credit的{​​{1}}。

我使用以下SQL查询加入V_GLBATCH_AR_COGSV_ARINVOICE_ALL,除了“未选择的信用”外,我得到了所有正确的结果:

V_ARINVOICE_ALL
  

结果(41行)

SELECT 
V_ARINVOICE_ALL.INVOICE_DATE,
V_ARINVOICE_ALL.ARCUSTO_COMPANY,
V_ARINVOICE_ALL.ARCUSTO_CUSTNO,
V_ARINVOICE_ALL.INVOICE_NO


FROM   
IQMS.V_ARINVOICE_ALL V_ARINVOICE_ALL 


INNER JOIN
IQMS.V_GLACCT V_GLACCT
ON
  V_ARINVOICE_ALL.GLACCT_ID_SALES = V_GLACCT.ID AND V_GLACCT.ACCT = '3648-00-0'



WHERE 
V_ARINVOICE_ALL.ARCUSTO_CUSTNO = 'OX01' 
AND 
V_ARINVOICE_ALL.INVOICE_DATE >= TO_DATE('05/04/2016', 'dd/mm/yyyy')
AND
V_ARINVOICE_ALL.INVOICE_DATE <= TO_DATE('15/06/2017', 'dd/mm/yyyy')

ORDER BY 
 V_ARINVOICE_ALL.INVOICE_DATE 

但是当我尝试使用以下查询加入 |INVOICE_DATE|...| INVOICE| +------------+---+--------+ | 05/04/2016|...| 494658| | 20/05/2016|...| 495274| | 20/05/2016|...| 495275| V_ARINVOICE_ALL时:

V_GLBATCH_AR_COGS
  

我得到的结果如下:(165行)

SELECT 
 V_ARINVOICE_ALL.INVOICE_DATE,
 V_ARINVOICE_ALL.ARCUSTO_COMPANY,
 V_ARINVOICE_ALL.ARCUSTO_CUSTNO,
 V_ARINVOICE_ALL.INVOICE_NO,
 V_GLBATCH_AR_COGS.CREDIT AS "INCOME"


FROM   
 IQMS.V_ARINVOICE_ALL V_ARINVOICE_ALL 


INNER JOIN
 IQMS.V_GLBATCH_AR_COGS V_GLBATCH_AR_COGS
ON
 V_ARINVOICE_ALL.GLBATCHID_ID = V_GLBATCH_AR_COGS.ID
 AND V_ARINVOICE_ALL.GLPERIODS_ID_AR = V_GLBATCH_AR_COGS.GLPERIODS_ID
 AND V_GLBATCH_AR_COGS.DESCRIP LIKE '%OX01%ITEMS%' AND V_GLBATCH_AR_COGS.ACCT = '3648-00-0'



WHERE 
 V_ARINVOICE_ALL.ARCUSTO_CUSTNO = 'OX01' 
AND 
 V_ARINVOICE_ALL.INVOICE_DATE >= TO_DATE('05/04/2016', 'dd/mm/yyyy')
AND
 V_ARINVOICE_ALL.INVOICE_DATE <= TO_DATE('15/06/2017', 'dd/mm/yyyy')

ORDER BY 
 V_ARINVOICE_ALL.INVOICE_DATE 
  

期望的结果(41行)

  |INVOICE_DATE|...| INVOICE|  INCOME|
  +------------+---+--------+--------+
  |  ...       |...|  ...   |   ...  |
  |  23/06/2016|...|  495667|     225|
  |  23/06/2016|...|  495667|     225|
  |  23/06/2016|...|  495667|     225|
  |  23/06/2016|...|  495667|     225|
  |  23/06/2016|...|  495667|     225|
  |  23/06/2016|...|  495667|     225|
  |  23/06/2016|...|  495667|     450|
  |  23/06/2016|...|  495667|     450|
  |  23/06/2016|...|  495667|     450|
  |  ...       |...|  ...   |   ...  |

我比以前更加熟悉联接。但我不确定我做得对不对。我尝试了右连接,右外连接,左连接,左外连接等。我在这里做错了什么?

EDIT2:第一次编辑很糟糕没有任何意义。我不知道这是否有帮助,但只有两行是

  |INVOICE_DATE|...| INVOICE|  INCOME|
  +------------+---+--------+--------+
  |  ...       |...|  ...   |   ...  |
  |  23/06/2016|...|  495667|     225|
  |  23/06/2016|...|  495667|     225|
  |  23/06/2016|...|  495667|     450|
  |  ...       |...|  ...   |   ...  |
表中的

与加入时的 | 23/06/2016|...| 495667| 225| | 23/06/2016|...| 495667| 225| 子句匹配:WHERE

但仍然会得到它超过两次。所以我想它与1到很多的关系有关。我不确定如何处理。

如果有任何帮助。

如果您需要更多信息,请随时提出。

1 个答案:

答案 0 :(得分:0)

看起来像是一对多的关系。 COGS表中的值多于您所需的值(可能是另一列填充了其他数据)。

尝试SELECT DISTINCT限制所选列的唯一值:

SELECT DISTINCT -- DISTINCT goes here
 V_ARINVOICE_ALL.INVOICE_DATE,
 V_ARINVOICE_ALL.ARCUSTO_COMPANY,
 V_ARINVOICE_ALL.ARCUSTO_CUSTNO,
 V_ARINVOICE_ALL.INVOICE_NO,
 V_GLBATCH_AR_COGS.CREDIT AS "INCOME"


FROM   
 IQMS.V_ARINVOICE_ALL V_ARINVOICE_ALL 


INNER JOIN
 IQMS.V_GLBATCH_AR_COGS V_GLBATCH_AR_COGS
ON
 V_ARINVOICE_ALL.GLBATCHID_ID = V_GLBATCH_AR_COGS.ID
 AND V_ARINVOICE_ALL.GLPERIODS_ID_AR = V_GLBATCH_AR_COGS.GLPERIODS_ID
 AND V_GLBATCH_AR_COGS.DESCRIP LIKE '%OX01%ITEMS%' AND V_GLBATCH_AR_COGS.ACCT = '3648-00-0'



WHERE 
 V_ARINVOICE_ALL.ARCUSTO_CUSTNO = 'OX01' 
AND 
 V_ARINVOICE_ALL.INVOICE_DATE >= TO_DATE('05/04/2016', 'dd/mm/yyyy')
AND
 V_ARINVOICE_ALL.INVOICE_DATE <= TO_DATE('15/06/2017', 'dd/mm/yyyy')

ORDER BY 
 V_ARINVOICE_ALL.INVOICE_DATE