如何优化SQL查询

马利克斯

我有一个SQL Server表Top_Research_Areas,其中包含像ie这样的数据

aid     res_category_id    research_area            Paper_Count     
---------------------------------------------------------------
2937    33                 markov chain             3               
2937    33                 markov decision process  1               
2937    1                  linear system            1               
11120   29                 aspect oriented prog     4               
11120   1                  graph cut                2               
11120   1                  optimization problem     2               
12403   2                  differential equation    7               
12403   1                  data structure           2               
12403   1                  problem solving          1               
35786   1                  complete graphs          11              
35786   1                  graph cut                10              
35786   NULL               NULL                     2               
49261   3                  finite automata          6               
49261   3                  finite element           2               
49261   14                 database                 2                
78841   5                  genetic programming      6               
78841   23                 active learning          2               
78841   28                 pattern matching         1                 

现在,我要选择pid从另一个表,即sub_aminer_paper针对aid的表Top_Research_Areas,而表sub_aminer_paper中包含列,即aidpidresearch_areares_category_id和一些列了。

而且Top_Research_Areas只包含top_3记录research_area的,而表中sub_aminer_paper包含了比这些记录为其他aid'S IN Top_Research_Areas

我用过这个查询,即

SELECT
    aid, pid, research_area
FROM
    sub_aminer_paper 
WHERE
    aid IN (2937, 11120)
    AND research_area IN (SELECT
                              research_area 
                          FROM 
                              Top_Research_Areas 
                          WHERE
                              aid IN (2937, 11120))
ORDER BY aid ASC

现在的问题是,当通过匹配两个表中pid的来从中检索时,它会给我输出,例如,如果我检索两个记录ie,它会给我输出:sub_aminer_paperresearch_areaaid293711120

在此处输入图片说明

我们可以看到,Paper_Count对于前2aid的是3+1+1+4+2+2即它应该给13记录,但它给14因为research_areaoptimization problem实际上属于aid11120在表中Top_Research_Areas,但通过使用IN子句匹配research_area它正在作为一个混合research_area的两种aid的,而我需要13在输出中而不是记录14

如何处理?

请帮忙,谢谢!

阿米尔·佩尔(Amir Pelled)

可能有一篇关于援助2937的“优化问题”的论文,没有记录在top_research_Areas中。

请参阅id,这会有所帮助:从存在(aid,research_area)组合的sub_aminer_paper中进行选择,

SELECT
    sap.aid, sap.pid, sap.research_area
FROM
    sub_aminer_paper  sap
WHERE
  sap.AID IN (2937, 11120) --- For indexing which I'm assuming this column has
  AND EXISTS (SELECT 1 FROM Top_Research_Areas tra WHERE tra.aid = sap.aid and tra.research_area = sap.research_area and tra.aid in (2937,11120))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章