2016-07-27 3 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

그냥 당신이 일반적으로 내가 토큰의 수에 의해 주문 것 –

답변

0

이것은 INNER JOINSELECT TOP을 사용하는 간단한 쿼리입니다. JOINS에 대해 조사해 보셨습니까? 또한, 당신은 많은 것을 의미하지 않는다고 확신합니까? 토큰이 여러 문장으로 나타나면 상위 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 

일대 다수로 편집 됨!

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 결과를 보여, 그래서이 필요 내림차순 순서 토큰의 수에 의해 그룹이하지 않는 것입니다. 위의 내용은 상위 25 개의 키워드를 수천에서 분리하지 않았습니다. 오늘 사용하는 상위 25 개 쿼리를 추가했습니다 (위 참조). – Rob

+0

나는 혼란 스러웠다. 하나의 토큰이 여러 문장으로 나눌 수 있다는 것을 의미하면 상위 25 개의 하위 쿼리에서 선택하고 다른 테이블과 내부 조인을 선택해야합니다. –

+0

토큰이 각 열에 있습니다. 네, 현재 하위 쿼리가 있고 문장을 찾기 위해 뷰가 있습니다. 가능하다면 속도는 괜찮지 만보기를 없애고 싶습니다. 그러나 수백만 개의 레코드가있을 수 있으며보기가 느려질 수 있습니다. – Rob

관련 문제