【发布时间】:2013-03-01 16:09:28
【问题描述】:
我正在制作一个与性别相关的名字字典,所以我有一个主表可以说:
**name_dict a**
name gender
=======================
jhon male
jane female
anna female
还有一个源数据表,它有“重复”,我的意思是,同名,不同性别,如下所示:
**name_source b**
name gender
=======================
cameron male
cameron female
anna female
travis male
我想用这个条件合并这两个表
- 忽略 anna(在合并条件 a.name=b.name 中完成)
- 忽略cameron条目(这是我卡住的地方)
我将如何创建我的合并以获得这个结果?
name gender
----------------
jhon male
jane female
anna female
travis male
非常感谢您的所有帮助和建议!
编辑---------------------------------------------- -------------------------- 所以,这是我用我的灵感创造的
merge into name_dictionary x using(
select a.name,a.gender from name_source a, (select name,count(1) from name_source group by name having count(1)>1 order by count(1)) b
where a.name=b.name
) y
on (x.name=y.name)
when not matched then
insert (name,gender)
values (y.name,y.gender)
然后我说,让我们根据我们的朋友 Thomas Tschernich 的建议对其进行测试,因为我使用了:
insert into name_dictionary
select name,gender
from name_source t1
where
(t1.name, t1.gender) not in (
select name, gender from name_dictionary
)
and
(t1.name, t1.gender) not in (
select t2.name, t2.gender
from name_source t2
join name_source t3 on (t2.name = t3.name and t2.gender != t3.gender)
);
然后两个人互相攻击并得到:
QUERY EXEC TIME FINAL ROWS PLAN DATA
merge 2 secs 96,070 MERGE STATEMENT ALL_ROWS Cost: 253 Bytes: 46,752 Cardinality: 974
c-Insert killed (31m) ¿? INSERT STATEMENT ALL_ROWS Cost: 24,656,135 Bytes: 1,051,700 Cardinality: 105,170
这是我使用的表格的信息:
Table Initial Rows Observations
name_dictionary 3,097 The ones already inserted
name_source 101,205 The ones i want to filter and add to the name_dictionary
(无法正确格式化,希望它可读) 无论如何,我希望你能详细说明它是否正确或我错过了什么,非常感谢!!!
---新发现 如果我在合并中删除订单,成本会上升到 298;
【问题讨论】:
-
您能否展示您当前的
merge声明,以便人们可以在此基础上进行构建? -
我还没写完,我不知道如何为同名不同性别的情况添加条件,但现在我有了想法,我会在测试后大约 15 分钟后发布,受到启发!
标签: oracle merge duplicates