使用SQL联接和子查询查询R中的两个表

使用SQL联接和子查询查询R中的两个表,sql,r,join,Sql,R,Join,我是初学者 我有两个.txt文件,我使用R和sqldf包来查询它们 第一个表(viouses.txt)如下所示: userID,venueID,year,month,date,hour 1302,47,2012,2,24,11 45,132,2012,2,24,11 24844,86,2012,2,24,11 896,248,2012,2,24,11 5020,29,2012,2,24,11 userID,friendID 1,5 1,9 1,50 1,102 1,300 第二个表(frie

我是初学者

我有两个.txt文件,我使用R和sqldf包来查询它们

第一个表(viouses.txt)如下所示:

userID,venueID,year,month,date,hour
1302,47,2012,2,24,11
45,132,2012,2,24,11
24844,86,2012,2,24,11
896,248,2012,2,24,11
5020,29,2012,2,24,11
userID,friendID
1,5
1,9
1,50
1,102
1,300
第二个表(friends.txt)如下所示:

userID,venueID,year,month,date,hour
1302,47,2012,2,24,11
45,132,2012,2,24,11
24844,86,2012,2,24,11
896,248,2012,2,24,11
5020,29,2012,2,24,11
userID,friendID
1,5
1,9
1,50
1,102
1,300
我想查询用户(假设userID=1)与一个或多个朋友(friendID)访问的场馆(venueID)

注意:朋友表的userID和friendID都可以链接到场馆表中的userID

查询结果应如下所示:

venueID  friendID
47       5
47       9
29       102
86       102
SELECT v1.venueID, f.friendID

FROM venues v1 
INNER JOIN friends f ON v1.userID = f.userID 
INNER JOIN venues v2 ON v2.userID = f.friendID

WHERE
   v1.venueID = v2.venueID
   v1.year = v2.year
   v1.month = v2.month
   v1.date = v2.date
   v1.hour = v2.hour
我可以使用许多单独的查询来实现这一点,然后将它们连接到一个表中,但我的数据集非常大。有没有更简单的方法

我可以查询用户或其朋友访问过的所有场馆:

sqldf("select userID, venueID from data
       where userID=1 OR userID IN (select friendID from freind where userID=1)")

非常感谢。

我是一名Java pl/sql开发人员,下面是我要回答的问题:“至少有两位朋友访问过的场馆列表” 在from子句中,仅使用join并假设来自VICENOTES.txt的数据称为VICENOTES,friends.txt文件称为friend。基本上,我假设这些文件是表

SELECT v1.venueID, f.friendID

FROM venues v1 
INNER JOIN friends f ON v1.userID = f.userID 
INNER JOIN venues v2 ON v2.userID = f.friendID

WHERE
   v1.venueID = v2.venueID
如果您想添加更多条件,例如“至少有两个朋友一起访问,因此具有相同的年、月、日、时”,则只需将它们添加到筛选器(WHERE子句)。因此,查询将如下所示:

venueID  friendID
47       5
47       9
29       102
86       102
SELECT v1.venueID, f.friendID

FROM venues v1 
INNER JOIN friends f ON v1.userID = f.userID 
INNER JOIN venues v2 ON v2.userID = f.friendID

WHERE
   v1.venueID = v2.venueID
   v1.year = v2.year
   v1.month = v2.month
   v1.date = v2.date
   v1.hour = v2.hour

如果场地上有两个以上的朋友(或者可以选择同时有两个以上的朋友),您可能需要在SELECT语句中使用DISTINCT。

您的意思是,您想要一个用户访问的场地列表,而他的一个朋友也访问了该场地?换句话说,至少有两位朋友参观过的场馆列表?或者你想要一份至少有两个朋友一起参观过的地点的清单,这样就有了相同的年、月、日、时?实际上我需要这两个。那太好了!