Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql或与操作_Mysql - Fatal编程技术网

MySql或与操作

MySql或与操作,mysql,Mysql,我的表架构如下所示: +------+-------+-------+ | id | name1 |

我的表架构如下所示:

                      +------+-------+-------+                                                                                                                                                         
                      | 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     |
                      |    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     |
                       +------+-------+-------+
这个结果是如何产生的

我希望查询返回的行中的名称1为A或B,名称2为“B”

查询结果应该是这样的

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

我希望查询结果只使用“AND”和“AND”或“OR”运算…

我建议您仔细阅读。这是一个非常简单的操作,所以如果你熟悉B.L.,你就可以自己做这个了

也就是说,这两个州将实现你想要的:

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

通过添加括号将条件分组

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

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

你应该用括号

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


这是一个优先问题。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是一个输入错误,因为它与您的问题的其余部分不匹配)。

有人能解释一下查询是如何从t中选择*的,其中name1='a'或name1='B'和name2='C';执行并给出两行作为结果,因为它被视为name1=A或(name1=b和name2=c)。注意括号
绑定比
更紧密。布尔代数有运算顺序,就像普通代数一样(例如旧的贝德马斯记忆法:括号、指数、除法、乘法、加法、减法)。可能重复