2012-11-15 42 views
0

我的表架構如下:MySQL或和與運算

     +------+-------+-------+                                       
         | id | name1 | name2 |                       
         +------+-------+-------+                       
         | 1 | A  | B  | 
         | 2 | A  | C  | 
         | 3 | B  | A  | 
         | 4 | C  | D  | 
         +------+-------+-------+ 

,我使用的查詢,如下所示:

  select * from t where name1='A' or name1='B' and name2='C'; 

,結果如下

     +------+-------+-------+ 
         | id | name1 | name2 | 
         +------+-------+-------+ 
         | 1 | A  | B  | 
         | 2 | A  | C  | 
         +------+-------+-------+ 

如何這個結果來了,

我wan噸它返回行,在該NAME1將查詢和NAME2是「B」

查詢結果應該是這樣的

     +------+-------+-------+ 
         | id | name1 | name2 | 
         +------+-------+-------+ 
         | 1 | A  | B  | 
         +------+-------+-------+ 

我想要查詢的結果只使用「AND」和「OR」操作...

+0

可能重複的[MySQL邏輯運算符](http://stackoverflow.com/questions/690763/mysql-logical-operators) – Jocelyn

回答

2

我建議你閱讀約boolean logic。這是一個非常簡單的操作,所以如果你熟悉B.L.,你自己就可以做到這一點。

話雖這麼說,這兩個國家將完成你想要的:

SELECT ... WHERE (name1 IN ('A', 'B')) AND (name2 = 'B') 
SELECT ... WHERE ((name1 = 'A') or (name1 = 'B')) AND (name2 = 'B') 
+0

任何人都可以解釋如何查詢select * from t where name1 ='A'或name1 = 'B'和name2 ='C';執行並給出兩行,結果爲 – Aravind

+2

,因爲它被視爲name1 = A OR(name1 = b和name2 = c)。請注意括號。 '或'綁定比'和'更緊密。布爾代數的運算次序與常規代數一樣(例如舊的BEDMAS mineromic:括號,指數,除法,乘法,加法,減法)。 –

0

組的條件加入括號

select * from t where (name1='A' or name1='B') and name2='B'; 

或使用IN

select * from t where name1 IN ('A','B') and name2='B'; 
0

您應該使用圓括號

select * from t where name1='A' or name1='B' and name2='C'; 

應該

select * from t where (name1='A' or name1='B') and name2='B'; 
0
select * from t where (name1='A' or name1='B') and name2='B'; 
0

這是一個優先問題。在B和C子句結合在一起,這意味着你要:

select * from t where name1='A' or (name1='B' and name2='B'); 

所以,你需要做的就是明確自己的綁定條款的內容:

select * from t where (name1='A' or name1='B') and name2='B'; 

(假設你在你的規定使用C查詢是一個錯字,因爲它不符合你的問題的其餘部分)。