sqldf 中的多个连接,包括完全连接
Multiple joins in sqldf, including a full join
我需要 运行 使用 sqldf 进行多重连接查询。我有一个用 SQL 编写的原始代码,必须在 R 中复制,所以我正在使用 sqldf。我的问题是,在嵌套连接中,有一个 FULL JOIN,而 sqldf 仍然不支持 FULL JOIN。所以我正在寻找解决方法。
我的嵌套连接是一个完整连接,然后是一个左连接。我的解决方案是从查询中取出完整连接,运行 它,以及结果数据集,运行 下一个左连接。原始代码说:
select
i1.ID as id1,
i2.ID as id2,
i3.type
from Blad1 i1
full join Blad2 ii3 on i1.ID_pers = ii3.ID_pers_1
left join Blad1 i2 on ii3.ID_pers_2 = i2.Id_pers
left join Blad1 i3 on i1.ID_pers = i3.Id_pers
where i1.Type = 'OCCUPATION'
我的解决方案是 运行 与 dplyr 函数完全连接 full_join:
fulljoin <- full_join(Blad1, Blad2, by = c("ID_pers" = "ID_pers_1"))
然后,查询:
B <- sqldf ("select
i1.ID as id1,
i2.ID as id2,
i3.type
from fulljoin i1
left join INDIVI i2 on i1.ID_pers_2 = i2.Id_pers
left join Blad1 i3 on i1.ID_pers = i3.Id_pers
where i1.Type = 'OCCUPATION'")
两组数据为:
Blad1
ID ID_D ID_pers SOURCE TYPE VALUE
1 STANDARD 1 PARISH RECORD ARRIVAL_FROM Bijmeer
2 STANDARD 2 PARISH RECORD OCCUPATION Almere
3 STANDARD 2 PARISH RECORD ARRIVAL_FROM WISKUNDE
4 STANDARD 3 PARISH RECORD OCCUPATION BILDERDIJK
5 STANDARD 4 PARISH RECORD ARRIVAL_FROM Enschede
Blad2
ID ID_D ID_pers_1 ID_pers_2 RELATION
933104 STANDARD 4 2021643 Father
1478 STANDARD 4 1 Child
1664 STANDARD 2118979 2021107 Child
6918 STANDARD 2481830 2 Child
7088 STANDARD 2 2011817 Child
1268853 STANDARD 1 3 Mother
问题是我的解决方案无法正常工作,因为左连接使用 table Blad 2
后的原始子句
(ii3.ID_pers_2 = i2.Id_pers),
而我的解决方案,对于同一个子句,我只能使用 Full Join 结果 table
(i1.ID_pers_2 = i2.Id_pers)
这两个条件不一样,所以两个left join的结果不一样,嵌套的查询也不一样,最后的结果也不一样。
任何提示,欢迎。
感谢您的阅读。
sqldf 支持 4 个后端,而 PostgreSQL 后端支持完全连接。
将您的代码修改为如下内容:
library(RPostgreSQL)
library(sqldf)
sqldf('
select
i1."ID" as id1,
i2."ID" as id2
from "Blad1" i1
full join "Blad2" ii3 on i1."ID_pers" = ii3."ID_pers_1"
left join "Blad1" i2 on ii3."ID_pers_2" = i2."ID_pers"
where i1."TYPE" = \'OCCUPATION\'
')
在 ?sqldf
和 FAQ 12 中有更多关于将 PostgreSQL 与 sqldf 结合使用的信息。如何将 sqldf 与 PostgreSQL 结合使用? 在 sqldf github page .
另一种方法是使用默认值模拟完全联接。查看 sqlite 后端:http://www.sqlitetutorial.net/sqlite-full-outer-join/ or FULL OUTER JOIN with SQLite
我需要 运行 使用 sqldf 进行多重连接查询。我有一个用 SQL 编写的原始代码,必须在 R 中复制,所以我正在使用 sqldf。我的问题是,在嵌套连接中,有一个 FULL JOIN,而 sqldf 仍然不支持 FULL JOIN。所以我正在寻找解决方法。
我的嵌套连接是一个完整连接,然后是一个左连接。我的解决方案是从查询中取出完整连接,运行 它,以及结果数据集,运行 下一个左连接。原始代码说:
select
i1.ID as id1,
i2.ID as id2,
i3.type
from Blad1 i1
full join Blad2 ii3 on i1.ID_pers = ii3.ID_pers_1
left join Blad1 i2 on ii3.ID_pers_2 = i2.Id_pers
left join Blad1 i3 on i1.ID_pers = i3.Id_pers
where i1.Type = 'OCCUPATION'
我的解决方案是 运行 与 dplyr 函数完全连接 full_join:
fulljoin <- full_join(Blad1, Blad2, by = c("ID_pers" = "ID_pers_1"))
然后,查询:
B <- sqldf ("select
i1.ID as id1,
i2.ID as id2,
i3.type
from fulljoin i1
left join INDIVI i2 on i1.ID_pers_2 = i2.Id_pers
left join Blad1 i3 on i1.ID_pers = i3.Id_pers
where i1.Type = 'OCCUPATION'")
两组数据为:
Blad1
ID ID_D ID_pers SOURCE TYPE VALUE
1 STANDARD 1 PARISH RECORD ARRIVAL_FROM Bijmeer
2 STANDARD 2 PARISH RECORD OCCUPATION Almere
3 STANDARD 2 PARISH RECORD ARRIVAL_FROM WISKUNDE
4 STANDARD 3 PARISH RECORD OCCUPATION BILDERDIJK
5 STANDARD 4 PARISH RECORD ARRIVAL_FROM Enschede
Blad2
ID ID_D ID_pers_1 ID_pers_2 RELATION
933104 STANDARD 4 2021643 Father
1478 STANDARD 4 1 Child
1664 STANDARD 2118979 2021107 Child
6918 STANDARD 2481830 2 Child
7088 STANDARD 2 2011817 Child
1268853 STANDARD 1 3 Mother
问题是我的解决方案无法正常工作,因为左连接使用 table Blad 2
后的原始子句(ii3.ID_pers_2 = i2.Id_pers),
而我的解决方案,对于同一个子句,我只能使用 Full Join 结果 table
(i1.ID_pers_2 = i2.Id_pers)
这两个条件不一样,所以两个left join的结果不一样,嵌套的查询也不一样,最后的结果也不一样。
任何提示,欢迎。
感谢您的阅读。
sqldf 支持 4 个后端,而 PostgreSQL 后端支持完全连接。
将您的代码修改为如下内容:
library(RPostgreSQL)
library(sqldf)
sqldf('
select
i1."ID" as id1,
i2."ID" as id2
from "Blad1" i1
full join "Blad2" ii3 on i1."ID_pers" = ii3."ID_pers_1"
left join "Blad1" i2 on ii3."ID_pers_2" = i2."ID_pers"
where i1."TYPE" = \'OCCUPATION\'
')
在 ?sqldf
和 FAQ 12 中有更多关于将 PostgreSQL 与 sqldf 结合使用的信息。如何将 sqldf 与 PostgreSQL 结合使用? 在 sqldf github page .
另一种方法是使用默认值模拟完全联接。查看 sqlite 后端:http://www.sqlitetutorial.net/sqlite-full-outer-join/ or FULL OUTER JOIN with SQLite