2016-03-24 9 views
0

Ben MY SORU I VEYA ifadesi ProductCode1, ProductCode2 & arasındaki açık ve kapalı parantez koymalıyız örneğin için bir Çoklu SQL Server sorgu kullanarak VE & VEYAParantezleme nerede çoklu kullanımda fıkra, VE ve VEYA

var ProductCode3.

Sormamın nedeni. Braketi her koyduğumda ve sorguyu çalıştırdığımda, parantez çıkarıldığında farklı bir sonuç alırım.

SELECT ProdID, 
     Productname, 
     SalesDate, 
     ProductCode1, 
     ProductCode2 
FROM Product_Table 
WHERE SalesDate >= ‘2015-01-01’ 
    AND Productname IN (‘CA’,’DC’,’BF’,’GH’,’TQR’,’VXT’) 
    AND ProductCode1 IN (232, 878, 287, 986, 672) 
    OR ProductCode2 IN (213, 543, 971, 435,627) 
    OR ProductCode3 IN (32, 89,67,45) 
+3

o filtreleme için koşullar ne bağlıdır sizin örneğe çevrilmiş şu şekilde görünecektir. –

+1

Şahsen, bir başkasının sorguyu okuyup okumadığı anlaşılırsa, bir WHERE deyiminde ANDs ve OR'leri her birleştirdiğimde parantezler kullanıyorum. – paulbailey

cevap

1

Ben Sorgunuzun niyet '2015-01-01' den büyük veya eşit bir SalesDate olan kayıtları bulmak VE listelenen sette productName var VE birine sahip olduğunu tahmin ediyorum productCode alanları 'değerleri belirttiğiniz setlerle eşleşir. Bu durumda, tüm productCode filtrelerini parantezler kullanarak birlikte gruplandırmanız gerekir.

SELECT ProdID, 
      Productname, 
      SalesDate, 
      ProductCode1, 
      ProductCode2 
    FROM Product_Table 
    WHERE SalesDate >= ‘2015-01-01’ 
     AND Productname IN (‘CA’,’DC’,’BF’,’GH’,’TQR’,’VXT’) 
     AND (ProductCode1 IN (232, 878, 287, 986, 672) 
       OR ProductCode2 IN (213, 543, 971, 435,627) 
       OR ProductCode3 IN (32, 89,67,45)) 

Bu, AND ve OR işleçlerini kullanmanın çok temel bir bileşenidir. Sizin için iyi bir kaynak bulmaya çalışıyorum, ama bunu [maybe this will help]. 1

2

Anahtar sözcük, işleçlerin hangi sırayla değerlendirildiğini belirleyen Operatör Önceliği'dir. SQL lehçelerinde (aslında her programlama dilinde) AND operatörünün OR operatöründen daha yüksek önceliğe sahip olduğunu biliyorum.

A AND B AND C OR D OR E 

aşağıdaki ifade eşdeğerdir:, ifade (E koşullar A) daki örnek

karşılaştırılmıştır: Bununla birlikte, operatör değerlendirilir sırası kullanılarak parenthesises ile kontrol edilebilir: aşağıdakilerden biri doğru olmalıdır anlamına gelir

(A AND B AND C) OR D OR E 

:

  • A sorgunuzla Çeviri

    A AND B AND (C OR D OR E) 
    

    , bu görünecektir: ve B ve C

  • veya D
  • veya E

Ama örneğe göre, muhtemelen böyle bir şey isteyeyim böyle:

SELECT ... 
FROM Product_Table 
WHERE SalesDate >= ‘2015-01-01’ 
    AND Productname IN (‘CA’,’DC’,’BF’,’GH’,’TQR’,’VXT’) 
    AND (ProductCode1 IN (232, 878, 287, 986, 672) 
     OR ProductCode2 IN (213, 543, 971, 435,627) 
     OR ProductCode3 IN (32, 89,67,45)) 

Böylece A ve B doğru olması gerekir, ve C, D veya E, ya da doğru olmalıdır.

Bu durum, örneğin, TSQL ve önceliklere belirli bir sürümünde tüm operatörlerin tam listesi: https://msdn.microsoft.com/en-us/library/ms190276.aspx