2017-03-21 9 views
0

私はキーワードとテキストを一致させています。 (問題のようなテキストの両方のID 3,4,8,9,11が含まれていないテキストを除外する方法である本当に単純なSQLクエリ

TextID KeywordID 
2 4 
2 7 
3 4 
4 4 
5 4 
5 7 
6 4 
6 7 
7 4 
7 7 
8 4 
9 4 
10 4 
10 7 
11 4 
12 4 

:私は2つのキーワード(4)と(7)を含むすべてのテキストを返す必要があります彼らは結果に含まれるべきではない)?

任意の助けもいただければ幸いです!

答えて

1

動作するはずです以下、あなたが重複textId-KeywordIdペアを持っていないと仮定:

SELECT textid 
FROM table 
WHERE keywordId in (4,7) 
GROUP BY textid 
HAVING COUNT(*) >= 2 

あなたはDUPを持っている場合、あなたはゴードンの答え@あたりとしてcount(distinct keywordId)使用することができます。

更新 は、ここでMS Accessクエリです:

SELECT tblPerformanceKeyword.TextID 
FROM tblPerformanceKeyword 
WHERE tblPerformanceKeyword.KeywordID = 4 Or tblPerformanceKeyword.KeywordID = 7 
GROUP BY tblPerformanceKeyword.TextID 
HAVING COUNT(tblPerformanceKeyword.KeywordID) >= 2; 
+0

は、私は私の答えの前に、このシナリオを指定された理由です、合意しました。とにかく、そのビットを追加します、ありがとう。 –

+0

あなたの返信に本当に感謝します!残念ながら、MSAccessを使用していますので、上記のソリューションに基づいて正確な構文を教えてください。ここで元々どのように見えますか?SELECT tblPerformanceKeyword.PerformanceKeywordID、tblPerformanceKeyword.TextID、tblPerformanceKeyword.KeywordID FROM tblPerformanceKeyword WHERE(((tblPerformanceKeyword.KeywordID)= 4または(tblPerformanceKeyword.KeywordID)= 7)); – Falkor

+0

@FalkorがMSアクセスクエリ –

2

一つの方法は、group byhavingを使用しています:表が重複して持つことができる場合

select textid 
from t 
where keywordid in (4, 7) 
group by textid 
having count(*) = 2; 

count(distinct keywordid)を使用してください。