在YQL中是否有可能获取两个结果集的交集或差集?

3
我需要完全在客户端上构建一个 Twitter 模块。
我打算使用 Twitter API 获取数据,并使用 YQL 跨越 Same Origin Policy,同时也因为它具有更高的速率限制。我以前成功地使用过这种组合。
其中一件事是要获取带有特定标签和来自有限用户集的推文列表。 这会获取由用户 alexdicksonlizardbill 发布的带有 #stackoverflow 标签的推文列表。 我还需要获取不同的推文集合。 这会获取所有带有 #stackoverflow 标签的推文。 现在,我需要显示第二个集合,但不包括第一个集合的结果。这将是结果的差异,类似于PHP的array_diff()
为了完整起见,我可能还需要通过获取两个结果的交集来实现某些内容,即出现在两个结果集中的推文列表。这类似于PHP的array_intersect()
我已经有一段时间没有使用SQL了,无法想到如何在YQL中实现这一点。
2个回答

2

看起来我终于搞定了。YQL支持子查询。

SELECT results 
FROM   json 
WHERE  url = "http://search.twitter.com/search.json?q=%23stackoverflow" 
       AND results.id NOT IN (SELECT results.id 
                              FROM   json 
                              WHERE  url = 
"http://search.twitter.com/search.json?q=%23stackoverflow%20from%3aalexdickson,%20OR%20from%3alizardbill" 
) 

YQL Console.


你也可以类似地利用 twitter.search 社区表。select * from twitter.search where q="#stackoverflow" and id not in (select id from twitter.search where q="#stackoverflow from:alexdickson, OR from:lizardbill") - salathe
@salathe 谢谢你的回复。我之前没有注意到社区表格。如果你把它作为答案发表,我会接受 :) - alex

2
YQL支持子查询。请参见使用子查询连接表格。子查询与IN运算符一起使用,以过滤外部查询的结果。
对于您特定的查询,还有一个twitter.search社区开放数据表可用,可以避免构建Twitter URL并使用json表。
select *
from twitter.search
where q="#stackoverflow" 
and id not in (
    select id 
    from twitter.search 
    where q="#stackoverflow from:alexdickson, OR from:lizardbill"
)

请尝试在YQL控制台中运行此查询。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接