我已经运行下面的查询得到所需的10行作为结果,但它返回12行的结果更多。查询实际上是在SQL Server表的列拆分;
分号分隔值,然后通过匹配那些;
分裂文本值获得各自的ID从另一个表。SQL查询返回结果比要求
当我给一个PID
它返回正确的结果,当我给多个PID
的如(5, 7)
,那么它也给出了正确的结果,因为有column
即name
之间不匹配。
但是,当我给PID
的即(5, 1956275)
,然后它给两行(重复/相似的)额外的结果即行数11
12
和它们完全相同的行数和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
我不明白为什么它会给出两个额外的行。另外,在第一张图像中有PID
的订单,但第二张图像中的PID
没有看到订单,而查询是相同的。我附上了PID
图像的(5,7)
当没有比赛在name
和PID
的(5, 1956275)
当存在name
匹配。
当PID(5,1956275) - (应该有记录,并在这里被记录!)
请帮忙谢谢!
为什么你需要在你的子查询'ROW_NUMBER'?为什么你检查它是否大于0? (它总是大于0)。我会使用'SELECT *'来调试并查看重复记录来自哪里。 –