2012-01-04 6 views
0

に従って:の分離SQL SELECT結果セットのクエリのこの種のWHERE条件

SELECT userID FROM Users 
WHERE (condition1) 
OR (condition2) 
OR (condition3) 

私は、結果セットは何とか「条件2を満たしているものと「条件1」を満たした結果を「差別」にしたいです'条件3'に該当する者と比較した。

たとえば、何らかの理由で結果セットに条件が満たされた(1,2、または3)を含む2番目の列を持つようにします。

これはどのように達成できますか?

ありがとうございます。

+0

これはSQLの問題ではなく、厄介な問題です。あなたのアプリを再考してください。 –

+0

@Leandro、私はあなたのコメントを本当に理解していない、私はSQLクエリで具体的な目標を達成する方法を尋ねた、どのように "問題の種類"は関係がありますか? –

+0

@YuvalA。 - あなたは、そのSQLで無関係なステートメントを(効果的に)実行しているか、またはアプリケーションがその区別をするための十分な情報を含んでいないので、重要な場所です。代わりに、アプリケーション層で適用する必要があるデータベースでフィルタリングを適用しています。現時点では、SQLとアプリケーションを同期して維持する必要があります(条件は一致しなければなりません)。アプリケーションに十分な情報を提供して独自のフィルタリングを行うと、それらは独立したものになります。 –

答えて

7

あなたは例えば、このためにCASEステートメントを使用することができます。:

SELECT userID, 
    case 
     when (condition1) then 1 
     when (condition2) then 2 
     when (condition3) then 3 
    end as ConditionMet 
FROM Users 
    WHERE (condition1) 
    OR (condition2) 
    OR (condition3) 

注:何かが複数の条件を満たした場合には、このアプローチは、あなたが表示されません。そのためには、おそらく別々の列が必要です。

+0

RedFilterありがとうございました。 –

0

IF句のための具体的な構文は、DBMSによって異なりますが、このようなものが動作するはずです:1がマッチしたかを示す追加の列を追加するには、where句で指定された

select userid, 
(if (condition1) THEN 1 else 0) as COndition1, 
(if (condition2) THEN 1 else 0) as COndition2, 
(if (condition3) THEN 1 else 0) as COndition3 
FROM table 
WHERE (condition1) or (condition2) or (condition3) 
0

使用するのと同じ条件を。たとえば:

SELECT userID , 
case when condition1 then 'condition1' 
when condition2 then 'condition2' 
else 'condition3' end as matched 
FROM Users 
WHERE (condition1) 
OR (condition2) 
OR (condition3) 
0

条件が重ならない場合(つまりは排他的である)あなたがこれを行うことができます。ユーザーが複数の条件に一致する場合は、重複を取得しますが

SELECT userID, 'condition1' 
    FROM Users 
    WHERE (condition1) 
UNION ALL 
SELECT userID, 'condition2' 
    FROM Users 
    WHERE (condition2) 
UNION ALL 
SELECT userID, 'condition3' 
    FROM Users 
    WHERE (condition3) 
ORDER BY userID 

。場合によってはこれが便利かもしれませんが、重複を除外する必要がある場合は、次のようにしてください。

SELECT userID, 'condition1' 
    FROM Users 
    WHERE (condition1) 
UNION ALL 
SELECT userID, 'condition2' 
    FROM Users 
    WHERE (condition2) AND NOT (condition1) 
UNION ALL 
SELECT userID, 'condition3' 
    FROM Users 
    WHERE (condition3) AND NOT (condition2) AND NOT (condition1) 
ORDER BY userID