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