我正在使用合并第一次...虽然但是没有得到适当的帮助但仍然没有得到适当的帮助。
请帮我解决以下问题,
我有一个表“table_a”有3列AB和C,C是新列,添加的列A和B的组合是唯一的,具体的列B是从table_b取得的子代码列表,并针对A栏中的实体。
我需要使用现有A和B组合的硬编码值更新C列,如果table_A中table_b中缺少某些子代码,则需要在table_a中插入相同的行。
例如。 table_a
A B C
= = =
p x
p y
表b
M
=
x
y
z
执行查询后
表-A
A B C
= = =
p x 1 -- updated with column C
p y 1 -- updated with column C
p z 1 -- new row inserted for the row in table B
如果有任何事情不清楚,请告诉我。
提前感谢。
答案 0 :(得分:1)
MERGE INTO table_A a
USING table_b b
ON(a.b = b.m)
WHEN MATCHED THEN
UPDATE SET a.c = 1
WHEN NOT MATCHED THEN
INSERT (a, b, c)
VALUES ('P', b.m, 1)
注意:插入内容有两个硬编码值,列a和列c为' P'和1分别。
答案 1 :(得分:0)
如果您不想对插入的值进行硬编码,则可以使用内嵌视图生成所有预期的组合并合并。
merge into table_a a
using (
select t.a, b.m, 1 as c
from (select distinct a from table_a) t
cross join table_b b
) b
on (a.b = b.m)
when matched then
update set a.c = b.c
when not matched then
insert (a, b, c) values (b.a, b.m, b.c);
using
子句对所有table_a.a
值进行所有(不同)table_b.m
值的交叉连接,以提供所有可能的组合。 (这似乎是你想要的;你还没有显示两者之间的任何其他联系)。我还在该视图中包含了固定值1
。
然后,合并会为c
中已经退出的匹配值设置table_a
,或者使用内嵌视图中的值插入新行。
您可以从其他查找表中获取唯一的a
值,这比点击table_a
两次更好,但这取决于您的实际数据模型。