表左连接

时间:2017-07-18 07:49:19

标签: sql database oracle join

我目前正在尝试从我想加入的两个表中获取输出,看起来我脑子里想到了如何解决这个问题。

表1包含具有唯一ID的产品。

ID | (other info)
-----------------
AA |
BB |
CC |

表2将表1的唯一ID作为FK,以及我想加入表1的型号和部分代码。表2包含大量其他信息,从而产生以下可能的星座:

ID | FK | model number | part-code
-----------------------------------
01 | AA | model0001    | part923
02 | AA | model0001    |
03 | AA |              | part923
04 | BB | model0002    |
05 | BB |              | part876
06 | CC |              | part551

表2中的信息非常分散,不一定完整。我也不想假设对于给定的FK,模型编号和部件代码在所有条目中保持相同(如果给定FK有多个变体,我只想要一个条目,即使它是随机的)

我想要实现的结果是获取从表1中提取的所有信息,并且给出始终存在唯一ID(表2中的FK),并添加型号和部分 - 代码(如果存在)到表中而不创建任何重复项。因此,上面的例子应该给出以下输出。

ID | model number | part-code | (other info from table 1)
---------------------------------------------------------
AA | model0001    | part923   |
BB | model0002    | part876   |
CC |              | part551   |

我还应该提到表2非常大(数百万条目),除了表1中的ID之外我无法匹配数据。这个表也很大 - 因此有效的方法是接近这个必要。 感谢您抽出宝贵时间阅读本文并帮助我了解如何解决此问题。 最好, 纳斯

2 个答案:

答案 0 :(得分:1)

你是对的,你需要一个OUTER JOIN来获取table1table2中所有匹配记录的所有记录。

table2每次点击只获得一条记录非常棘手。此聚合子查询将生成所需的输出。请注意,此解决方案可以生成(model_number,part_code)的排列,table2中的任何单个记录中都不存在这种排列;我想这没关系,因为这是您的示例结果集为BB显示的内容。跨越"数百万条目的表现"可能很慢。但这是一个(单独的)调整问题。

select t1.id
       , t2.model_number 
       , t2.part_code
       , t1.whatever
       , t1.blah
       , t1.etc
from table1 t1
left outer join ( select fk 
                         , max (model_number) as model_number
                         , max (part_code) as part_code
                  from table2 
                  group by fk ) t2
    on t1.id = t2.fk
order by t1.id
/

答案 1 :(得分:0)

您可以尝试此SQL

SELECT t1.ID, t2.model_number, t2.part-code FROM table1 t1
LEFT JOIN table2 t2 ON t1.ID = t2.FK
GROUP BY t1.ID

希望有所帮助!