SQL查询返回的结果超过了所需的

时间:2015-10-07 07:57:06

标签: sql-server query-optimization record repeat

我已经运行以下查询以获取所需的10行作为结果,但它返回12行作为结果。该查询实际上是在SQL Server表的一列中拆分;分号分隔值,然后通过匹配那些;拆分文本值从另一个表中获取相应的id。

当我提供单PID时,它会返回正确的结果,当我提供多个PID时,例如(5, 7),然后它也会给出正确的结果,因为columnname之间不匹配。

但是当我给PID的{​​{1}}时,它会在结果的末尾给出两行(重复/相似),即行号(5, 1956275)和{{1} }与行号1112完全相同。

1

我没有得到这个,为什么它给了两个额外的行。此外,在第一张图片中有2的订单,但DECLARE @X XML --DECLARE @paperID int --SET @paperID = 5 DECLARE @STR VARCHAR(MAX)='' SELECT @STR = @STR+';'+P_AUTHOR FROM sub_aminer_paper WHERE PID IN (5, 1956275) ORDER BY PID ASC SELECT @STR = substring(@STR,2,len(@STR)) SELECT @X = CONVERT(xml,' <root> <s>' + REPLACE(@STR,';','</s> <s>') + '</s> </root> ') SELECT s.aid as [Counted_aid], s.name, p.pid, p.rank FROM aminer.dbo.aminer_author s INNER JOIN aminer.dbo.aminer_author2paper p ON s.aid = p.aid AND p.pid IN (5, 1956275) INNER JOIN (SELECT row_number() OVER(ORDER BY (SELECT null)) AS rn, T.c.value('.','varchar(max)') AS value FROM @X.nodes('/root/s') T(c) ) t ON t.value = s.name WHERE rn > 0 ORDER BY rn 在第二张图片中看不到订单,而查询则相同。当PIDPID的{​​{1}}与PID匹配时,我(5,7)的{​​{1}}附加了图片}}。

当PID IN(5,7) - (应该有 6 记录,这里没问题!)
enter image description here

当PID IN(5,1956275) - (应该有 10 记录,这里 12 记录!)
enter image description here
请帮助和谢谢!

1 个答案:

答案 0 :(得分:1)

对不起,我没有足够的声誉来评论你的问题......

为什么使用XML结构作为临时存储位置? 我想,您可以使用CTE表达式而不是XML ...

所以,即使你很难理解你想做什么,我也有一些建议:

  • 在执行GROUP AND OVER的CTE表达式中使用aminer.dbo.aminer_author2paper和sub_aminer_paper
  • 然后将aminer.dbo.aminer_author表加入CTE

在所有情况下,XML都是不必要的。