我已经运行以下查询以获取所需的10行作为结果,但它返回12行作为结果。该查询实际上是在SQL Server表的一列中拆分;
分号分隔值,然后通过匹配那些;
拆分文本值从另一个表中获取相应的id。
当我提供单PID
时,它会返回正确的结果,当我提供多个PID
时,例如(5, 7)
,然后它也会给出正确的结果,因为column
即name
之间不匹配。
但是当我给PID
的{{1}}时,它会在结果的末尾给出两行(重复/相似),即行号(5, 1956275)
和{{1} }与行号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
的{{1}}与PID
匹配时,我(5,7)
的{{1}}附加了图片}}。
答案 0 :(得分:1)
对不起,我没有足够的声誉来评论你的问题......
为什么使用XML结构作为临时存储位置? 我想,您可以使用CTE表达式而不是XML ...
所以,即使你很难理解你想做什么,我也有一些建议:
在所有情况下,XML都是不必要的。