如何在SQL中选择包含两个特定结果的所有搜索?

时间:2015-01-15 21:44:54

标签: sql postgresql

我的目标是找到所有返回两个已在另一个表中标记为成对的结果的搜索。

我有两张桌子:

Search_Results

...
request_id          varchar(16)
result_id           bigint
...

request_id对应于搜索请求,result_id对应于显示的结果之一。每个请求通常会有10-15个结果。

Result_Pairs

...
left_result_id   bigint
right_result_id  bigint
...

left_result_idright_result_id是一对结果ID,对应于搜索结果表中的result_id

我对SQL相当陌生,我不知道如何为我的生活找出如何获得所有request_id s用于从结果对返回两个结果的搜索。我应该从哪里开始?作为一个警告,Search_Results有大约33亿行,Result_Pairs有大约400万行,所以性能将是一个问题。通过按日期限制,Search_Results可以并且将会被大量削减,但仍然会有数百万行。

1 个答案:

答案 0 :(得分:0)

不确定我理解你的问题,但这样的事情可能是:

select *
from search_results sr
  join result_pairs rp on sr.result_id 
                          between rp.left_result_id and rp.right_result_id;
where search_date = date '2015-01-15'

您肯定需要search_results (result_id)上的索引和result_pairs (left_result_id, right_result_id)上的索引(当然还有该日期列)