2014-10-27 75 views
0

我们有2代表与英文单词:words_1和words_2用字段(字为VARCHAR,REF为INT),其中字 - 这是一个英文单词,楼盘 - 对另一个(第三)表引用(这并不重要)。大内连接

在每个表中所有的字都是唯一的。第一个表格包含一些不在第二个表格中的单词(相反,第二个表格包含一些独特的单词)。在两个表

但大多数的话是一样的。

需要去:结果表与所有不同的词和参考的。

为相同的表初始条件

  1. 价的可以是不同的(字典从不同的地方加载)。
  2. 字数计算每表300 000,所以内部联接是不是方便易

例子

words_1 
________ 
Health-1 
Car-3 
Speed-5 

words_2 
_________ 
Health-2 
Buty-6 
Fast-8 
Speed-9 

Result table 
_____________ 
Health-1 
Car-3 
Speed-5 
Buty-6 
Fast-8 
+0

您的结果不显示“所有不同的词和ref”。它显示了所有区别词与一个REF(默认为words_1.ref或至少(words_1.ref,words_2.ref)在歧义的情况下 - 这是不清楚哪个)。 – 2014-10-27 13:54:38

回答

0

尝试使用full outer join

select coalesce(w1.word, w2.word) as word, coalesce(w1.ref, w2.ref) as ref 
from words_1 w1 full outer join 
    words_2 w2 
    on w1.word = w2.word; 

唯一的一次,这将不工作是如果ref可以在任一表中是NULL。在这种情况下,改变on到:

on w1.word = w2.word and w1.ref is not null and w2.ref is not null 

如果你想提高性能,只需要创建在表上的索引:

create index idx_words1_word_ref on words_1(word, ref); 
create index idx_words2_word_ref on words_2(word, ref); 

一个join是相当可行的,即使没有索引,SQL服务器应该足够聪明以提供合理的实现。

1
select word,min(ref) 
from (
    select word,ref 
    from words_1 
    union all 
    select word,ref 
    from words_2 
    ) t 
group by word