2

我的数据库中有三个以上的表(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

4

1 回答 1

2

您可以将这些列与 SQLite coalesce() 核心函数合并

      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
于 2012-09-06T20:42:06.920 回答