我正在寻找要使用3个表进行更新的SQL。
例如: 表1:
ID Address Name MutipleID
1 ABC Apple 123xyz
2 DEF Mango 456stu
3 HFG Orange 789wac
表2:
ID ADDRESS NAME MutipleID
1 ABC null 123xyz
2 null Mango 456stu
null HGF null 789wac
表3:
ID ADDRESS NAME MutlipleID
T 123xyz
null T 456stu
null null T 789wac
所以,我的逻辑应该是这样,
我的table3主要是一个查询表,用于检查表1和2中的哪些列匹配。
所有这三个表都有一个公共列“ MutilpleID”,这是它们用于创建udpates的链接列
我不确定如何实现此逻辑。
答案 0 :(得分:0)
我以这种方式看到它:
update Table3
set
ID = case when t1.ID=t2.ID then 'T' else null end,
ADDRESS = case when t1.ID<>t2.ID and t1.Address=t2.ADDRESS then 'T' else null end,
NAME = case when t1.ID<>t2.ID and t1.Address<>t2.ADDRESS
and t1.Name=t2.NAME then 'T' else null end
from Table3 t3
join Table2 t2 on (t3.MultipleID=t2.MultipleID)
join Table1 t1 on (t2.MultipleID=t1.MultipleID)
答案 1 :(得分:0)
这可以在数据流任务中通过使用查找组件来匹配表1和表2来完成。从这一点出发,然后可以根据ID,Address和Name列中的值重定向行,并更新表3相应地。当然,需要对您的确切表名和列名进行一些更新,但是下面列出了此过程的概述。
MutipleID
列中包含文本,因此建议您使用No cache
选项,以避免潜在的排序规则/大小写比较问题,除非您要按大小写进行匹配。默认情况下,查找将使没有相应匹配项的行失败,因此您将希望使用Redirect Rows to no Match Output
或Ignore Failure
选项来处理没有匹配项的行(在“常规”窗格中查找编辑器)。MutipleID
列。接下来,通过选中每列旁边的框并在“查找操作”字段中选择<add as new column>
选项,将表2中的列添加到数据流中。在“输出别名”字段中给他们一个描述性名称,例如LKUP_ID。Lookup Match Output
输出。对于第一个条件,为两个表的ID列添加一个比较。请注意,如果这些为空,则这将导致错误。为避免这种情况,请在REPLACENULL
函数中包装每一列。如果您不想匹配空值,请为每列的第二个参数使用不同的值。这篇文章的末尾有一个示例(该示例与null不匹配)。条件拆分会将行仅定向到一个输出,这是条件为true的第一个输出。按照问题的顺序,在ID列中添加一个条件,然后依次在Address和Name列中添加一个条件。给每个输出一个符合条件的名称,即ID匹配的匹配ID输出。MutlipleID
”列从“可用输入列”框中拖动/链接到“可用目标列”框中的参数(可能标记为Param_0)。这将使用数据流中的MutlipleID
列来匹配表3中的相应行。更新连接到匹配地址输出的另一个OLE DB命令以对Address列进行相同的更新,并重复相同的步骤名称输出和列也是如此。有条件拆分示例条件:
REPLACENULL(ID, 0) == REPLACENULL(LKUP_ID, 1)
OLE DB命令更新SQL:
UPDATE YourSchema.Table3 SET ID = 'T' WHERE MultipleID = ?