我是初学者。
我有两个.txt文件,我正在使用R和sqldf pakage来查询它们
第一个表(venues.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
第二个表(friends.txt)如下所示:
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
我可以使用许多单独的查询来执行此操作,然后将它们连接到表中,但我的数据集非常大。有没有更简单的方法呢?
我能够查询用户或他的朋友访问过的所有场所:
sqldf("select userID, venueID from data
where userID=1 OR userID IN (select friendID from freind where userID=1)")
非常感谢。
答案 0 :(得分:1)
我是一名Java pl / sql开发人员,所以我的回答是:“至少有两位朋友访问的场地列表” 仅使用join并假设来自venues.txt的数据被称为场所和friends.txt文件在FROM子句中称为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子句)。所以查询看起来像这样:
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
如果场地内有超过2位朋友(或可选择同时),您可能需要在SELECT语句中使用DISTINCT。