使用RSQLite在R中加入2个以上的表

时间:2012-09-06 20:13:29

标签: r sqlite

我的数据库中有三个以上的表(t1,t2,t3)。我在R中使用RSQLite。这些数据库是由数据框构成的。

+t1
  fileA valA
     a   12
     b   34
     c   78
     d   98
+t2
fileB valB
     b   45
     e   45
     f  452
     g    6
     d   89
+t3
fileC valC
     a   45
     b   34
     g   45
     i    3
     q    3

让我们从简单的场景开始(实际上,我有16个表连接在GB中),我想以下面的方式将所有上述3个表连接在一起。


预期结果

valA   valB   valC
a   12      NA      45
b   34      45      34
c   78      NA      NA
d   98      89      NA
e   NA      45      NA
f   NA      452     NA
.........

我使用了以下命令,但我没有得到两个表的预期结果:

    res <-dbSendQuery(con,"SELECT fileA,fileB,valA,valB from t1 LEFT OUTER JOIN t2 On t11.fileA= t2.fileB  UNION select fileA,fileB,valA,valB from t2 LEFT OUTER JOIN t1 ON t11.fileA= t2.fileB")

以上命令的输出

fileA fileB valA valB
1  <NA>     e <NA>   45
2  <NA>     f <NA>  452
3  <NA>     g <NA>    6
4     a  <NA>   12   NA
5     b     b   34   45
6     c  <NA>   78   NA
7     d     d   98   89

所以,我可以使用上面的命令,如果我可以加入输出的前两列。(删除所有的NA并保留名称,正如我在预期的结果中提到的那样)

另外,如果有人能告诉我如何加入三张以上的桌子,那会很有帮助。 RSQLite不支持RIGHT和FULL OUTER JOIN

1 个答案:

答案 0 :(得分:2)

您可以将这些列与SQLite coalesce() core function合并:

      select coalesce(fileA,fileB),valA,valB
               from t1 LEFT OUTER JOIN t2 On t1.fileA= t2.fileB
UNION select coalesce(fileA,fileB),valA,valB
               from t2 LEFT OUTER JOIN t1 ON t1.fileA= t2.fileB