我目前正在尝试从我想加入的两个表中获取输出,似乎我对如何解决这个问题有一个障碍。
表 1 包含具有唯一 ID 的产品。
ID | (other info)
-----------------
AA |
BB |
CC |
表 2 具有表 1 作为 FK 的唯一 ID,以及我想加入表 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 外,我无法匹配数据。该表也非常大 - 因此,一种有效的方法是解决这个问题必要的。 感谢您花时间阅读本文并帮助我了解如何处理此问题。 最好, 乔纳斯
最佳答案
你是对的,你需要一个 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
/
关于sql - 表左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45160594/