首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大内连接

大内连接
EN

Stack Overflow用户
提问于 2014-10-27 13:42:30
回答 2查看 53关注 0票数 0

我们有两个带有英语单词的表: words_1和words_2,它们都有字段( word作为VARCHAR,ref作为INT),其中word -它是一个英文单词,ref -引用在另一个(第三)表上(它并不重要)。

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

但是两张桌子上的大多数单词是一样的。

需要获取:包含所有不同单词和引用的结果表。

初始条件

  1. 相同表的Ref可以是不同的(字典是从不同的地方加载的)。
  2. 每张表中的字数为30万字,因此内部连接不方便。

示例

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2014-10-27 13:48:11

代码语言:javascript
复制
select word,min(ref)
from (
    select word,ref
    from words_1
    union all
    select word,ref
    from words_2
    ) t
group by word
票数 1
EN

Stack Overflow用户

发布于 2014-10-27 13:45:10

尝试使用full outer join

代码语言:javascript
复制
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更改为:

代码语言:javascript
复制
on w1.word = w2.word and w1.ref is not null and w2.ref is not null

如果您想提高性能,只需在表上创建一个索引:

代码语言:javascript
复制
create index idx_words1_word_ref on words_1(word, ref);
create index idx_words2_word_ref on words_2(word, ref);

一个join是非常可行的,即使没有索引,Server也应该足够聪明,能够找到一个合理的实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26588924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档