Select语句给出不同的记录集

时间:2013-12-05 05:37:24

标签: mysql sql

SELECT Count(*) 
FROM   stu_empl_pers 
WHERE  site_id = 'DEXLER'; 

返回22条记录。

但是

SELECT Count(*) 
FROM   stu_empl_pers a 
WHERE  a.status = 'A' 
        OR a.faculty = 1 
        OR a.staff = 1 
           AND a.site_id = 'DEXLER'; 

返回691条记录。它也考虑了不同的site_id。有人可以详细说明吗?

3 个答案:

答案 0 :(得分:2)

WHERE a.status='A' or a.faculty=1  OR a.staff=1 AND a.site_Id = 'DEXLER';
    (true/false    or  true/false  or (true/false  and  true/false))

也许这会更容易看出你的WHERE陈述意味着什么

如果OR之一(AND除外)变为真,则记录将被添加到结果中

认为AND喜欢数学中的乘法运算数,它优先于OR,在数学中可以被认为是sum操作数

2 * 2-1 = 3不是2

答案 1 :(得分:1)

那是因为过滤条件不同。 OR将返回所有符合过滤条件的记录。

也许您在第二个查询中寻找的是;

SELECT Count(*) 
FROM   stu_empl_pers a 
WHERE  ( a.status = 'A' 
          OR a.faculty = 1 
          OR a.staff = 1 ) 
       AND a.site_id = 'DEXLER';   <-- missing brackets

您要在第一个查询中添加二级过滤器(a.status='A' OR a.faculty=1 OR a.staff=1)

答案 2 :(得分:1)

  

我需要status = A和site_id ='dexler'是强制性的

那么,你能尝试一下吗?

Select count(*) from stu_empl_pers a 
WHERE (a.faculty=1  OR a.staff=1) 
      AND a.status='A' AND a.site_Id = 'DEXLER';