2011-01-19 1 views
2
SELECT * FROM foobar 
    WHERE userid != '100' AND col1 REGEXP '[[:<:]]test[[:>:]]' 
    OR userid != '100' AND col2 REGEXP '[[:<:]]test[[:>:]]' 
    OR userid != '100' AND col3 REGEXP '[[:<:]]test[[:>:]]' 

このクエリは問題なく機能しています。これは、二つの基準COL1やcol2のかcol3というは、「テスト」と この特定のクエリを変更するにはどうすればよいですか?

  • ユーザーIDを持っている
    1. に基本的にフィルタリングされますことは、私は私がすることを望む別のcol4を持っている以外の100

    ではありませんabove two conditionの場合、結果を除外する必要があります。col4 = 'y'

    上記のクエリを変更するにはどうすればよいですか?

  • 答えて

    2

    クエリにエラーがあります。col2col3に変更する必要があります。

    SELECT * FROM foobar 
    WHERE (userid != '100' AND col1 REGEXP '[[:<:]]test[[:>:]]') OR 
         (userid != '100' AND col2 REGEXP '[[:<:]]test[[:>:]]') OR 
         (userid != '100' AND col2 REGEXP '[[:<:]]test[[:>:]]') 
    

    また、評価順序を明確にするために括弧を追加しました。式userid != '100'を繰り返さないようにクエリを書き直すことができます。それからちょうどあなたの不足している句を追加します。このような

    SELECT * FROM foobar 
    WHERE userid != '100' 
    AND col4 <> 'y' 
    AND (
        col1 REGEXP '[[:<:]]test[[:>:]]' OR 
        col2 REGEXP '[[:<:]]test[[:>:]]' OR 
        col3 REGEXP '[[:<:]]test[[:>:]]' 
    ) 
    
    0
    SELECT * 
        FROM foobar 
        WHERE userid != '100' 
         AND (col1 REGEXP '[[:<:]]test[[:>:]]' 
          OR col2 REGEXP '[[:<:]]test[[:>:]]' 
          OR col3 REGEXP '[[:<:]]test[[:>:]]') 
         AND col4 <> 'y' 
    
    +0

    を彼はCOL4 = 'Y' との結果をフィルタリングしたい場合は、その最後のチェックを逆にすべきではありませんか? – Brandon

    +0

    @Brandon:Jinx。私たちは同時にそれを捉えたと思う。 –

    1

    何か?また、3つのチェックに共通するので、userid != '100'を分けることもできます。

    SELECT * 
    FROM foobar 
    WHERE userid != '100' 
        AND (col1 REGEXP '[[:<:]]test[[:>:]]' 
         OR col2 REGEXP '[[:<:]]test[[:>:]]' 
         OR col3 REGEXP '[[:<:]]test[[:>:]]') 
        AND col4 != 'y' 
    
    +0

    'col2'が2回あります。 –

    +0

    @Mark、oh、whoops。ありがとう。 – Brandon

    0

    これを試してみてください:

    SELECT * 
        FROM foobar 
    WHERE col4 = 'y' 
        OR (
           userid != '100' 
           AND (
               col1 REGEXP '[[:<:]]test[[:>:]]' 
               OR 
               col2 REGEXP '[[:<:]]test[[:>:]]' 
               OR 
               col2 REGEXP '[[:<:]]test[[:>:]]' 
              ) 
           ) 
    
    0
    SELECT * FROM foobar WHERE 
    (userid != '100') AND 
    (col1 REGEXP '[[:<:]]test[[:>:]]' OR userid != '100' OR col2 REGEXP '[[:<:]]test[[:>:]]' OR col2 REGEXP '[[:<:]]test[[:>:]]') 
    AND col4 <> 'y' 
    
    関連する問題