2013-02-28 55 views
-8

我創建SQL Server中的過程是這樣的:運營商,也是不起作用財產

select 
    column1, 
    column2... 
from 
    table 
where 
    column1 = abc 
    and column2 = 245 
    and condition3 
    and condition4 

SELECT是選擇失敗條件值,我需要限制的選擇。例如:

column1 column2 
abc 123 
cdf 245 
ghi 678 
+4

我們確實需要您實際使用的條件,而不是像*這樣的*。這很有可能是因爲你的條件有誤,而不是'AND'不能正常工作 – Lamak 2013-02-28 20:15:51

+0

@Lamak是的。看起來這似乎更可能是操作順序問題 – swasheck 2013-02-28 20:19:07

+0

如果可能,您需要用一些實際數據來澄清這一點。 – JNK 2013-02-28 20:19:53

回答

4

儘管您的文章中有不完整的信息,但我仍然會對此進行刺探。

只有AND運算符的鏈將要求每個表達式爲每個返回的行計算true。這與重力一樣重要。

簡而言之,AND的作品,它只是不像你所期望的那樣工作。

這裏可能會發生什麼是你有你的查詢中的其他表達式,你不覺得與問題相關。

例如

SELECT Column1, 
     Column2, 
     Column3 
FROM myTable 
WHERE Column1 = 'abc' 
    AND Column2 = 123 
    AND column3 = 'zyx' 
    OR Column3 = 'xyz' 

在邏輯上是完全不同的:

SELECT Column1, 
     Column2, 
     Column3 
FROM myTable 
WHERE Column1 = 'abc' 
    AND Column2 = 123 
    AND (column3 = 'zyx' 
    OR Column3 = 'xyz') 

在第一個例子操作的普遍接受的訂單將評估您的查詢作爲

(Column1 = 'ABC AND Column2 = 123 AND column3 = 'zyx') 

意味着所有以上必須爲真

OR Column3 = 'xyz' 

在情況1中,無論AND操作是否評估爲true,都會返回列3等於'xyz'的任何行。你是說,如果「操作」或「或」操作是真的,請給我一行。

如果你想SQL以不同的方式評估你的表現,你需要使用括號作爲的情況下,2

欲瞭解更多信息以指定優先級,看看msdn operator precedence你會看到與運算的手術室不久評估。

此外,如果您發佈您的實際查詢,我們可以在我們的幫助中更具體地確定問題出在哪裏。

0

這可能是因爲你的語法不正確,導致「和」 s被應用到每個謂詞的謂詞的一面 - 比如(「123」和列2)將返回true除非column2是0(假)或Null。你可以嘗試用圓括號包裝你的謂詞 - 至少這可能會導致SQL Server拋出一個錯誤,指出你正確的方向。