MySql OR和AND操作

时间:2012-11-15 14:49:51

标签: 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     |
                       +------+-------+-------+

这个结果是如何产生的和

我希望查询返回name1将 A B 并且name2为'B'的行

查询结果应该是这样的

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

我希望查询的结果只使用“AND”和“OR”操作...

5 个答案:

答案 0 :(得分:2)

我建议您阅读boolean logic。这是一个非常简单的操作,所以如果你熟悉B.L.,你自己就能做到这一点。

话虽这么说,这两个州将实现你想要的目标:

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

答案 1 :(得分: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';

答案 2 :(得分: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';

答案 3 :(得分:0)

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

答案 4 :(得分: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是一个拼写错误,因为它与您问题的其余部分不符)。