我的表架构如下:
+------+-------+-------+
| 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”操作...
答案 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是一个拼写错误,因为它与您问题的其余部分不符)。