2016-07-27 84 views
0

我有一個包含數千個關鍵字的表。我想分離出該表中排名前25位的負面關鍵字,然後從這些關鍵字創建一個連接來查找與另一個表中的關鍵字關聯的句子。最終結果將爲id_file,sentence_id,sentiment,sentence,token。兩個表都有令牌。SQL Server從另一個表中的一個表中選擇最高記錄

令牌表(tbl_token)具有以下的列:

id_file, sentence_id, sentiment, token 

的過濾器,以隔離從tbl_token頂部25如下:

id_file = 3, sentiment = 'negative' 

語句表(tbl_sentence)具有以下各欄:

id_file, sentence_id, sentiment, **sentence**, token 

兩個表中的sentence_id都有一對多的關係,所以加入這些關係就會把句子拉出來。來自頂部查詢的令牌存在於tbl_sentence中。

我現在的解決方案是首先運行tbl_token的前25位,對於上面的相同過濾器,計數令牌,按降序排序。

SELECT TOP (25) 
    COUNT(token) AS Count, token 
FROM 
    tbl_token 
GROUP BY 
    token, sentiment, id_file 
HAVING  
    (sentiment = N'negative') AND (id_file = 3) 
ORDER BY 
    COUNT(token) DESC 

然後我把它鏈接到一個視圖中的所有令牌,其中有sentence_id。然後,我可以將sentence_id從視圖鏈接到tbl_sentence,以根據前25個否定關鍵字分隔句子。

這個工程,但我只是想知道這是否可以在一個存儲過程中完成。

+0

只是告訴你want..thanks –

回答

0

這是一個簡單的查詢,使用SELECT TOPINNER JOIN。你有沒有研究JOINS?另外,你確定你不是指一對多嗎?如果令牌出現在多個句子中,那麼您只會獲得指定的前25個結果,而不是前25個令牌的多個匹配。 ORDER BY是相對重要的,因爲除非您指定排名順序,否則排名前25並不總是處於可預測的順序。

SELECT TOP 25 
    ts.id_file, 
    ts.sentence_id, 
    ts.sentiment, 
    ts.sentence, 
    ts.token 
FROM 
    tbl_token tt 
    INNER JOIN tbl_sentence ts on ts.sentence_id=tt.sentence_id 
WHERE 
    tt.id_file=3 
    AND 
    tt.sentiment='negative' 
ORDER BY 
    tt.SomeFieldToRank25ByDateOrPriority 

編輯爲一對多!

SELECT 
    ts.id_file, 
    ts.sentence_id, 
    ts.sentiment, 
    ts.sentence, 
    ts.token 
    SentenceCount=COUNT(*) 
FROM 
( 
    SELECT TOP 25 
     tt.sentence_id 
    FROM 
     tbl_token tt 
    WHERE 
     tt.id_file=3 
     AND 
     tt.sentiment='negative' 
    ORDER BY 
     tt.SomeFieldToRank25ByDateOrPriority 
)AS X 
INNER JOIN tbl_sentence ts on ts.sentence_id=x.sentence_id 
GROUP BY 
    ts.id_file, 
    ts.sentence_id, 
    ts.sentiment, 
    ts.sentence, 
    ts.token 
+0

通常我會通過令牌的數量排序的結果,所以不會這需要通過令牌的遞減次序的計有一組。以上不會隔離數以千計的前25個關鍵字。我添加了今天使用的前25個查詢(參見上文)。 – Rob

+0

我很困惑。如果你的意思是一個標記可以用多個句子,那麼你將需要從前25個子查詢中選擇,然後與其他表中的內部聯接。 –

+0

代幣在那裏各自的列。是的,目前我有一個子查詢,然後一個視圖來查找句子。我想擺脫這種觀點,如果可能的話,速度是可以的,但我可以擁有數百萬條記錄,並且這種觀點可能會減慢速度。 – Rob

相關問題