2012-03-16 138 views
0

說,如果表陷阱具有列 'ID' 和行內容mysql查詢。需要幫助

7 
8 
9 
10 
11 
12 
13 
14 

SELECT id FROM trap 
WHERE id<10 and id>12 

這並沒有給任何輸出

但如果

SELECT id FROM trap 
WHERE id>7 and id<14 

給我所需的輸出,即

8 
9 
10 
11 
12 
13 
+0

沒有整數比12大且小於10 – Antoine 2012-03-16 11:43:40

+0

而且應該還是在第一個查詢,因爲我猜你正在尋找的是範圍小於10或大於12 – pharalia 2012-03-16 11:43:57

+0

這將有助於您確定您正在嘗試做什麼。如果您想確定哪些行在兩個數字之間有值,那麼您的第二個表單是正確的,正如您發現的那樣。如果你想得到小於一個數字的任何數字,並且你想得到比另一個數字更多的數字,你必須將這兩個事物與一個或不是一個和。但是哪一個是正確的取決於你的目標。 – 2012-03-16 11:54:53

回答

2

問題是,您正在使用AND運算符,您應該使用OR。

SELECT id FROM trap WHERE id<10 OR id>12 

顯然id不能在同一時間兩個10和12,一個箱只能容納一個值。

或者你可以寫的聲明爲:

SELECT id FROM trap WHERE NOT(id BETWEEN 10 AND 12) 

之所以SELECT id FROM trap WHERE id>7 and id<14工作是,它可能的值在同一時間是BETWEEN 8和13(含) 。
然而,沒有辦法可以將值同時小於10和大於12。

所以如果條件是相互排斥的,你必須使用OR,如果條件不排除一個和其他,那麼你必須使用AND
您可以在NOT()中包裝測試以反轉測試,這是因爲ANDOR是完全相反的。

+0

@John:謝謝。現在可以運行 – Coder17 2012-03-16 11:45:48

0

我認爲你錯了,或者你錯誤地表述了這個問題。

id < 10和id> 12不可能同時爲真。這就是爲什麼你沒有得到任何結果爲您的第一個查詢。

什麼你要找的是:

SELECT id FROM trap WHERE id<10 OR id>12 
+0

您忘記了更正查詢... – Johan 2012-03-16 11:51:03