我已經運行下面的查詢得到所需的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 *'來調試並查看重複記錄來自哪裏。 –