sql - 表左连接

标签 sql database oracle join

我目前正在尝试从我想加入的两个表中获取输出,似乎我对如何解决这个问题有一个障碍。

表 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/

相关文章:

mysql - 选择不匹配任何元素的日期

sql - 尝试将数据从 Impala Parquet 表复制到非 Parquet 表

mysql - Hibernate 查询数据库

java - sqlite查询当前时间和时间戳

oracle - oracle如何创建只读数据库链接

oracle - 如何从oracle pl/sql中的数据库中提取所有表的表属性,如列名、数据类型、可为空

java - 我是否正确关闭了这个 Oracle 池连接?

sql - 使用 CTE 函数插入语句

作为加载基准,MySQL 查询真的很慢

sql - 在多少种语言中,Null 不等于任何东西,甚至不等于 Null?