多个字段的完全外连接

时间:2012-11-23 23:14:19

标签: sql sqlite outer-join

我有几张学术期刊排名表,来自不同来源和不同的引文指标。我想将它们组合在一个表中,通过日志聚合数据。

例如,第一个表包含列:

ISSN1 ISSN2 Journal_Name_1 Impact_Factor

,第二个表有列

ISSN3 ISSN4 ISSN5 Journal_Name_2 Citations

日记名称因数据来源而异,任何日记都可能包含0个或更多ISSN号码。我想要做的是创建一个包含列

的新表
ISSN1 ISSN2 ISSN3 ISSN4 ISSN5 Journal_name_1 Journal_Name_2 Impact_factor Citations

包括表1或表2中列出的所有期刊,如果条件

,则将第一个表中的一行与第二个表中的一行合并
( Journal_Name_1 = Journal_Name_2 ) OR ( at least one of ISSN1 or ISSN2 is equal to at least one of ISSN3, ISSN4, ISSN5)

创建该结果的最有效方法是什么?

(此时数据是CSV文件,我可以使用sqlite / mysql / postgresql /任何其他DBMS)

1 个答案:

答案 0 :(得分:1)

SQL Fiddle玩。

select t1.*, t2.*
from t1
left join t2 on (journal_name1 = journal_name2)
                or (issn1 in (issn3, issn4, issn5))
                or (issn2 in (issn3, issn4, issn5))
union all
select t1.*, t2.*
from t1
right join t2 on (journal_name1 = journal_name2)
                 or (issn1 in (issn3, issn4, issn5))
                 or (issn2 in (issn3, issn4, issn5));