2011-06-30 12 views
3

私はこのクエリを書く方法や説明する方法を失っています。基本的にWHERE句を複数の行に適用しようとしています。SQL - 複数の行に適用されるWHEREを使って選択する

私はそうのようなテーブルを持っている:

RuleID QuestionID AnswerID 
================================= 
1  1100  1105 
1  1200  1205 
1  1300  1305 
2  1100  1105 
2  1200  1206 
2  1300  1305 

私は具体的な質問/答えを持っているすべてのユニークなRuleIDsを得ることができますどのように疑問に思って。

たとえば、次のようになりますが、明らかに、同じ行のすべてのwhere句をチェックするため、結果は返されません。

select DISTINCT RuleID FROM table 
where (QuestionID=1100 and AnswerID=1105) 
and (QuestionID=1200 and AnswerID=1205) 
and (QuestionID=1300 and AnswerID=1305) 
+0

申し訳ありません。 ORの声明は私の質問に基づいて動作しますが、私が実際に渡すすべての基準、つまり私の例で定義されている3つの質問すべてに正しい答えを持つルールに一致するすべてのルールを実際に取得したい。だから、QuestionID = 1200の答えが一致しないので、RuleID 1は表示されますが、2は表示されません。しかし、OR文RuleID 2を使用しても表示されます。 – TomF

+0

私はうまくいくと思われるものを考え出しましたが、それが最良の方法かどうかはわかりません。基本的に一致したルールの数をチェックして: SELECT \t \tテーブルから WHERE \t \t(QuestionID = 1100)AND(AnswerID = 1105)OR \t \t(QuestionID = 1200)AND(AnswerID = 1205)を をRuleID OR \t \t(QuestionID = 1300)AND(AnswerID = 1305) GROUP BYは、はい、私は回答が特定されると信じて、私はまた – TomF

答えて

3

私はあなたの次本当にないんだけど、私はあなたがこのような何かしたいと思います。この単純な変更

select DISTINCT RuleID FROM table 
where (QuestionID=1100 and AnswerID=1105) 
or (QuestionID=1200 and AnswerID=1205) 
or (QuestionID=1300 and AnswerID=1305) 
1

を試してみてください:あなたはまた、別の選択を挿入することができ

select DISTINCT RuleID FROM table 
where QuestionID IN (values) 

をIN caluse:

select DISTINCT RuleID FROM table 
where QuestionId in (SELECT ...) 
1
select DISTINCT RuleID FROM table 
where (QuestionID=1100 and AnswerID=1105 
or (QuestionID=1200 and AnswerID=1205) 
or (QuestionID=1300 and AnswerID=1305) 

または何か不足していますか?

1

は、あなたの質問が書かれている方法に基づいて

SELECT DISTINCT RuleID 
FROM table 
WHERE QuestionID IN (1100,1200,1300) 
3

を探しているものの並べ替え(私はわからないあなたが「本当に」...あなた自身の入場によって、欲しいものを反映して)これは、あなたが望んでいると思います:

select DISTINCT RuleID FROM table 
where (QuestionID=1100 and AnswerID=1105) 
OR (QuestionID=1200 and AnswerID=1205) 
OR (QuestionID=1300 and AnswerID=1305) 

これでうまくいかない場合は、明確にしてください。

[編集]他の人も "OR"オプションを没収していますが、あなたが悪用できるパターンに気付いています。すべての 'answerID'は 'questionID'によって範囲指定されていますか? (質問XX00の利用可能な回答はXX01、XX02、... XX99です)。この場合、AnswerIDによってその値が引き継がれるため、where句からquestionIDを削除できます。これにより、IN節を次のように使用できます。

select DISTINCT RuleID FROM table 
where AnswerID IN (1105,1205,1305) 
+0

をHAVING をRuleIDその質問はおそらくクエリから削除される可能性があります。しかし、あなたの提案はまだルール2を返すと思います。 – TomF

+0

@rodolfo @ woot586 @rockinthesixstringを明確にする上でいくつかのコメントを追加しましたCOUNT(RuleID)= 3 – TomF

関連する問題