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)。注意括号
或
绑定比和
更紧密。布尔代数有运算顺序,就像普通代数一样(例如旧的贝德马斯记忆法:括号、指数、除法、乘法、加法、减法)。可能重复