如何仅从具有不重复的“ b”条目的行中导入来自不同SQL表的所有值。因为“ b”符号表示表中的唯一字符串。两个表都有。 5mio条目的。
A_Table
structure
'id', 'a', 'b', 'c', 'd'
B_Table
structure
'a', 'b', 'c'
从B_Table添加到A_Table 在“ B_Table.b”中找到“ A_Table.b”的地方
示例:
A_Table
1, "a1", "Hallo1", "c", "d"
2, "a1", "Hallo2", "c", "d"
3, "a1", "Hallo3", "c", "d"
4, "a1", "Hallo5", "c", "d"
5, "a1", "Hallo7", "c", "d"
6, "a1", "Hallo8", "c", "d"
B_Table
"a2", "Hallo1", "c"
"a2", "Hallo2", "c"
"a2", "Hallo3", "c"
"a2", "Hallo4", "c"
"a2", "Hallo5", "c"
"a2", "Hallo6", "c"
"a2", "Hallo9", "c"
查询后的A_Table
1, "a1", "Hallo1", "c", "d"
2, "a1", "Hallo2", "c", "d"
3, "a1", "Hallo3", "c", "d"
4, "a1", "Hallo5", "c", "d"
5, "a1", "Hallo7", "c", "d"
6, "a1", "Hallo8", "c", "d"
7, "a2", "Hallo4", "c", ""
8, "a2", "Hallo6", "c", ""
9, "a2", "Hallo9", "c", ""
答案 0 :(得分:1)
我认为您想要union all
:
insert into a_table (a, b, c, d)
select a, b, c, ''
from b_table b
where not exists (select 1 from a_table a where a.b = b.b);
如果您关心性能,则需要在a_table(b)
上建立索引。
这假设id
是自动分配的。
如果只需要一个结果集,则union all
:
select id, a, b, c, d
from b_table a
union all
select a.max_id + row_number() over (order by b.a, b.b, b.c),
b.a, b.b, b.c, ''
from b_table b cross join
(select max(id) as max_id from table_a) a
where not exists (select 1 from a_table a where a.b = b.b);
答案 1 :(得分:0)
尝试一下:
insert into A_Table (a,b,c)
(select B_Table.a, B_Table.b, B_Table.c from B_Table left join A_Table on
A_Table.b=B_Table.b where A_Table.id is null)