2013-03-11 159 views
-1

我正在过滤器搜索,我可以组成一个查询,但其AND部分没有返回我正确的值,其返回正确的结果为GPA,但它没有给出正确的结果程度检查因为它返回所有记录不适用“BSCS”在这里过滤器是查询代码:SQL查询返回错误的值

SELECT * 
FROM education 
WHERE gpa >= 2.10 
OR gpa =0 
AND degree = 'BSCS' 
OR degree = NULL 
+0

@Juhana没得到你的观点? – 2013-03-11 18:07:47

+0

您的查询要求gpa> = 2.10或零gpa BSCS学位或没有学位。所以只要gpa> = 2.10,你的查询并不关心度数。 – 2013-03-11 18:10:41

+0

我如何修改我的查询它的用户不适用GPA或度过滤器和SQL应该返回所有记录? – 2013-03-11 18:13:39

回答

7

它看起来像你需要添加一些括号:

SELECT * 
FROM education 
WHERE (gpa >= 2.10 OR gpa =0) 
AND (degree = 'BSCS' OR degree is NULL) 

如果你想在WHERE扩大条款,那么你可以使用:

SELECT * 
FROM education 
WHERE 
(
    (gpa >= 2.10 OR gpa =0) 
    AND (degree = 'BSCS' OR degree is NULL) 
) 
OR 
(
    (gpa is null or gpa ='') 
    or (degree is null or degree = '') 
) 
+0

非常感谢:) – 2013-03-11 18:08:55

+0

我该如何修改我的查询它的用户不适用全球通/国家级过滤器和SQL应该返回所有记录? – 2013-03-11 18:12:52

+0

确定,但请帮助我这个问题以及 – 2013-03-11 18:15:47

0

试试下面的代码:

使用和/或条件时,为了避免混淆始终把括号。 也是最好的方式来检查,如果一个字段为空为WHERE myField IS NULL

SELECT * 
FROM education 
WHERE (gpa >= 2.10 OR gpa =0) 
AND (degree = 'BSCS' OR degree is NULL) 
+0

@Junaid阿赫塔尔如果您对解决方案感到满意,请接受/投票。我的回答并不重复,但有人更新了代码....哈哈 – 2013-03-11 18:17:41