2016-04-17 22 views
0

クエリから正しい結果を得ることに問題があります。SQL複数のANDとORを同じクエリで使用する

私の主な問題は、私はこの形式でデータを含む列と呼ばれるfilterlistを持っているということである私は、このところのステートメント使用して私の最初のクエリに一致するすべての製品を選択する必要が[space]NUMBER[space]

| 2 | 16 | 7 | 

-

WHERE  
    (dept = '5') AND (active = 1) AND (Manufacturer = 'A Company') 

次に、列filterlistに文字列値[space]NUMBER[space]が含まれているレコードを検索するには、次を追加する必要があります。

私が試してみました、完全なSQLが

SELECT * 
FROM products 
WHERE 
    ((dept = '5') AND (active = 1) AND (Manufacturer = 'A Company')) 
    AND ((CHARINDEX(' 3 ', filterlist) > 0) OR 
     (CHARINDEX(' 34 ', filterlist) > 0) OR 
     (CHARINDEX(' 64 ', filterlist) > 0)) 

だから私は5としてDEPTを持つすべてのレコードを取得しているよさ210

(CHARINDEX(' 2 ', filterlist) > 0) OR (CHARINDEX(' 3 ', filterlist) > 0) 
OR (CHARINDEX(' 64 ', filterlist) > 0) 

は、アクティブであり、「A社」によって、列filterlistと判断(例として)3,34または64のいずれかを含む

UPDATE:すべてがこの部分で正常に動作します:

WHERE 
((dept = '5') AND (active = 1) AND (Manufacturer = 'A Company')) 
AND ((CHARINDEX(' 3 ', filterlist) > 0) 

しかし、このセクションは

OR 
    (CHARINDEX(' 34 ', filterlist) > 0) OR 
    (CHARINDEX(' 64 ', filterlist) > 0)) 

に追加されたときに誰もがこれを行う方法の方向に私を指すことができれば、私は非常に感謝される間違った部門/メーカーから他のレコードに引っ張ります。

+0

コードは大丈夫です。私はデータを検証するのが好きです。 http://sqlfiddle.com/の例では、テーブル構造体と1つまたは2つのレコードを設定できますか? – user212514

+0

これまでにこれを使用したことはありませんでしたが、今度はsqlfiddleアカウントを設定することになります –

+0

はsqlfiddleをセットアップしましたhttp://sqlfiddle.com/#!3/109814/1 –

答えて

1
  1. 数値型を数値型に保つことを検討してください。
  2. ことができないなら、あなたはSQLFiddleを作成するため、この

    SELECT * 
    FROM products 
    WHERE ((dept = '5') AND (active = 1) AND (Manufacturer = 'A Company')) 
    AND ltrim(rtrim(filterlist)) in ('3','34','64') 
    
+0

結果が生成されず、空白を取り除く必要はなく、starsの存在についてCHARINDEXを使用して各行を検索するだけでよい –

0

感謝を使用することができます。このクエリは、 'A Company'という2つの行を返しますので、正しいと思います(deptを削除しました。これはproductsに含まれていないためですが、この例では同じ論理的な組み合わせ、ちょうど1つ少ない)。

SELECT * 
FROM products 
WHERE 
    ((active = 1) AND (Manufacturer = 'A Company')) 
    AND ((CHARINDEX(' 3 ', filterlist) > 0) OR 
     (CHARINDEX(' 34 ', filterlist) > 0) OR 
     (CHARINDEX(' 64 ', filterlist) > 0)) 

さらにManufacturer = 'B Company'に変更したときは、3番目のレコードしか得られませんでした。

私には意味があります...私は何かを逃していますか?

関連する問題