2016-07-27 7 views
0

私は何千ものキーワードを持つテーブルを持っています。私はそのテーブルの中で上位25の除外キーワードを分離してから、それらのトップキーワードから別のテーブルのそれらのキーワードにリンクされたセンテンスを見つけるために結合を作成したいと思います。最終結果はid_file,sentence_id,sentiment,sentence,tokenとなります。どちらの表にもトークンがあります。SQL Server別のテーブルの1つのテーブルのトップレコードを選択します。

トークンテーブル(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には1対多の関係があるため、それらを結合すると文が引き出されます。上位クエリのトークンは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_idtbl_sentenceにリンクして、上位25個の除外キーワードに基づいて文を分離することができます。

これは機能しますが、これが1つのストアドプロシージャで実行できるかどうかは不思議です。

+0

はちょうどあなたが通常、私はトークンの数で注文するだろう –

答えて

0

これはSELECT TOPINNER JOINを使用した簡単なクエリです。あなたはJOINSを研究しましたか?また、あなたは1対1を意味しないのですか?トークンが複数の文章で表示される場合は、上位25個のトークンの複数の一致の代わりに、指定した最初の25個の結果のみが表示されます。 ORDER BYは、ランクオーダーを指定しない限り、TOP 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 

1対多に編集されました!

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

をwant..thanks結果を示したので、この必要性はDESC順のトークンの数として、グループを持たないでしょう。上の例では、上位25個のキーワードを千単位から分離していません。私は今日使用している上位25のクエリを追加しました(上記参照)。 – Rob

+0

私は混乱しました。 1つのトークンが複数の文に含まれる可能性がある場合は、上位25のサブクエリから選択し、次に他のテーブルとの内部結合を選択する必要があります。 –

+0

トークンはそれぞれの列にあります。はい、現在、私はサブクエリを持っていて、次に文を見つけるためのビューを持っています。可能であれば速度は問題ありませんが、私は数百万のレコードを持つことができ、そのビューは物事を遅くする可能性があります。 – Rob

関連する問題