Sql=“SELECT  a.grid_code as  区号,a.worker_id  AS 工作ID,b.name AS 姓名  , count(*)  as  数量  from  collection a , user b  where  a.grid_code=1 or a.grid_code= 2 and a.worker_id = b.worker_id group by  a.grid_code,a.WORKER_ID order by 区号,数量”
这是我的查询语句,当where  a.grid_code=1时就能正常查询,当加上or a.grid_code= 2 时,姓名那一栏除了我最后点击的那个"grid_code"外,全部都是user表中第一条记录的姓名。但是,id是对的。是正常的。例如:
当只有一个grid_code时 :
区号  id  姓名   数量 
1     1   aaa   25
1     8   bbb   35
1     12  ccc   68当有两个以上grid_code时 :
区号  id  姓名   数量 
1     1   aaa   25
1     8   aaa   35
1     12  aaa   68
2     5   aaa   65
2     8   aaa   89
3     8   www   123
3     2   sss   154这到底是什么原因,请高手指点。谢谢!

解决方案 »

  1.   

    结果就是这样的。我以为是我代码的问题,结果把这条语句摘出来放到mysql里跑了一下,一样的结果。
      

  2.   

    而且计算出来的数量也只有最后的那个grid是正确的,其他的计算结果比我库里的总量还多。
      

  3.   

    不清楚,你把那个 a.worker_id   =   b.worker_id 的放到连表那里试试先。
     from  collection a  inner join user b on a.worker_id = b.worker_id where a.grid_code=1   or   a.grid_code=   2 
      

  4.   

    仔细看了一下,应该是group by的问题
      

  5.   

    XFliangwh:
    from     collection   a     inner   join   user   b   on   a.worker_id   =   b.worker_id   where   a.grid_code=1       or       a.grid_code=       2   
    我按照你说的改了一下,可以了,谢谢,能告诉我为什么会这样吗?
      

  6.   

    不是说了不太清楚了?hoho我只是觉得你的where后又有and又有or很乱的,究竟sql怎么解释这种又and又or的语句,特别是group by了之后,我还没研究出来,所以才叫你把连表语句分开来看看咯。如果是别的不是连表的条件,就有点麻烦了,可能加些括号的可以提高某些操作的优先级。等我想通了再告诉大家看看。解决问题就好。