ORACLE SQL在不同的函数调用后显示重复

时间:2018-01-28 15:29:31

标签: sql oracle

我正在尝试在Oracle Developer中运行一个查询,该查询将从多个表中提取特定数据并将其连接到一个包含结果的表中。

请在下面找到示例代码:

select distinct tbl1.Product_ID, tbl2.Supplier_ID
from tbl3
inner join tbl1
on tbl1.Product_ID = tbl3.Product_ID
inner join tbl2
on tbl3.PO_ID = tbl2.PO_ID
where tbl1.Season_ID LIKE 'AA18'
order by tbl1.Product_ID

结果如预期:

+------------------+---------------+
|    Product ID    |  Supplier_ID  |
+------------------+---------------+
| ID-1             | NHII88        |
| ID-2             | NHII88        |
| ID-3             | NHII88        |
| ID-4             | NHII88        |
| ID-5             | NHII88        |
+------------------+---------------+

说明:此时需要不同,因为如果没有此通话,多个PO将会显示多个Product_ID' s(即ID-1)。

我想要实现的结果如下:

+------------------+---------------+
|    Product ID    |  Supplier_ID  |
+------------------+---------------+
| ID-1             | NHII88        |
| ID-1             | LLLLPP        |
+------------------+---------------+

+------------------+---------------+
|    Product ID    |  Supplier_ID  |
+------------------+---------------+
| ID-4             | NHII88        |
| ID-4             | LLLLP         |
| ID-4             | KKKOOP        |
+------------------+---------------+

它并不需要以这种方式进行分组,但其目的是在此查询中仅显示重复记录。 我一直在尝试使用HAVING,但我一定做错了,因为它返回了与示例一样的结果。

非常感谢任何建议。

数据示例: TBL1

+------------------+---------------+
|    Product ID    |  Season_ID    |
+------------------+---------------+
| ID-4             | AA18          |
| ID-4             | AA17          |
| ID-4             | AA16          |
+------------------+---------------+

TBL2

+------------------+---------------+
|    PO_number     |  Supplier_ID  |
+------------------+---------------+
| PO1234           | NHII88        |
| PO1235           | LLLLPP        |
| PO1236           | KKKOOP        |
+------------------+---------------+

TBL3

+------------------+---------------+
|    PO_number     |  Product_ID   |
+------------------+---------------+
| PO1234           | ID-1          |
| PO1235           | ID-2          |
| PO1236           | ID-3          |
+------------------+---------------+

我的业务规则是这样的。

tbl1包含有关产品的所有详细信息,例如Product_ID和Season_ID(ID-1和AA18)。 tbl2包含PO标题详细信息,例如PO编号和Supplier_ID。 tbl3包含采购订单行详细信息,例如采购订单编号和Product_ID。

我们的想法是从tbl3中提取所有采购订单编号,其中该表中的Product_ID = {1}}中的Product_Id和Season_ID = AA18。其他产品应该被忽略。如果结果匹配,则应将tbl1中的PO编号详细信息引用到tbl3,其中可以找到Supplier_ID。

期待上述结果。

1 个答案:

答案 0 :(得分:0)

发布的示例数据不包含任何重复数据,因此有点难以理解为什么您所需的输出看起来如此。但是,这会实现您发布的业务规则:

select tbl1.Product_ID
       , tbl2.Supplier_ID 
from tbl1
     inner join tbl3 on tbl1.Product_ID = tbl3.Product_ID 
     inner join tbl2 on tbl3.PO_number  = tbl2.PO_number 
where tbl1.Season_ID  = 'AA18'