【问题标题】:How to select all searches containing two specific results in SQL?如何在 SQL 中选择包含两个特定结果的所有搜索?
【发布时间】:2015-01-15 21:44:54
【问题描述】:

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

我有两张桌子:

搜索结果

...
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_ids。

我对 SQL 还很陌生,我一生都无法弄清楚如何获取所有 request_ids 以用于从结果对返回两个结果的搜索。我应该从哪里开始?需要注意的是,Search_Results 有大约 330 亿行,Result_Pairs 有大约 400 万行,因此性能将是一个问题。 Search_Results 可以并且将会通过日期限制而减少很多,但仍将是数百万行。

【问题讨论】:

  • 已修复。我正在用复制和粘贴做一些愚蠢的事情

标签: sql postgresql


【解决方案1】:

不确定我是否理解您的问题,但可能是这样的:

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) 上建立一个索引(当然在那个日期列上)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    相关资源
    最近更新 更多