默认情况下,两个表T1和T2的左连接,返回表T1中所有通过匹配表T2中的结果而连接的行,对于T1中没有匹配的T1行,左连接以空值完成>
让T1包含以下行
| id | class | student_id |
|-------------------------|
| 1 | math | null |
| 2 | svt | 1 |
和T2包含以下行:
| id | name |
|-----------|
| 1 | rach |
T1的结果与T2相连
select *
from T1 left join T2 on T1.student_id = T2.id
应该是这样的(我抽象了很多细节以显示案例问题)
| id | class | student_id | id | name |
|---------------------------------------|
| 1 | math | null | null| null |
| 2 | svt | 1 | 1 | rach |
在使用tMap进行左连接后,我期望有相同的行为,更重要的是,不匹配的行应使用null而不是零填充
以上图片显示了该实验的简化版本,以展示Talend中的问题 对于表res_partner中不匹配的行,在bref中,输出sales_rep_key的值为零而不是null
任何人都可以向我解释一下。
答案 0 :(得分:1)
在很大程度上取决于main
和lookup
行集的用例输入数据。如果我采用您的示例数据库案例并在Talend中实现,我将按照您的期望接收输出。 NULL
记录所有不匹配的行/列。
根据您的演示,我看到您正在尝试执行类似-
(sales_rep.id == 0) ? context.sales_rep_unko
但是我认为您应该这样使用(下面-组合中的任何一个都可以使用),而不是因为left-join
中有tMap
而导致行不匹配
(Relational.ISNULL(sales_rep.id) || sales_rep.id.isEmpty() || sales_rep.id.toString() == null)