我目前正在尝试从我想加入的两个表中获取输出,看起来我脑子里想到了如何解决这个问题。
表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之外我无法匹配数据。这个表也很大 - 因此有效的方法是接近这个必要。 感谢您抽出宝贵时间阅读本文并帮助我了解如何解决此问题。 最好, 纳斯
答案 0 :(得分:1)
你是对的,你需要一个OUTER JOIN来获取table1
中table2
中所有匹配记录的所有记录。
从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
希望有所帮助!