表一:client(id,compay,follow_pr,hezuo,type,web_url)
记录:(200,广州潮汛网络,lic,1,软件公司,http://www.yava.com.cn)
记录2:(201,bbddd,gg,0,SP,http://www.yava.com)表二:alias_name(alias_id,client_id,name)
记录1:(200,200,广州雅薇)
记录2:(201,201,广州亚商)现在我想搜索出"广州潮汛"或"广州雅薇"或"广州亚商"的公司名称是否存在?
是通过字段compay或name来匹配的.
我用的sql语句是:
select * from client a,alias_name b where a.id=b.client_id and
a.compay like '%广州雅薇%' or b.name like '%广州雅薇%'
(上面的匹配字段可以是广州亚商或广州潮汛)得出的答案有问题:
如果我搜索的是广州雅薇或广州亚商,得到的数据中出现两条结果:而且name字段的值都是广州雅薇或广州亚商
这是为什么?

解决方案 »

  1.   

    说明 compay,跟name有相同值
      

  2.   

    加括号! 就好了
    select * from client a,alias_name b where a.id=b.client_id and
    (a.compay like '%广州雅薇%' or b.name like '%广州雅薇%')
      

  3.   

    是这样的  select * from client a,alias_name b where a.id=b.client_id and
             a.compay like '%广州雅薇%' or b.name like '%广州雅薇%'如果不加括号  那么  a.id=b.client_id and a.compay like '%广州雅薇%'  这个先结合 返回false 因为表1中没有广州雅薇或者广州亚商  这样造成a.id=b.client_id 无效。会出现两表的笛卡尔积
    200,广州潮汛网    200,广州雅薇
    200,广州潮汛网    201,广州亚商
    201,bbddd         200,广州雅薇
    201,bbddd         201,广州亚商然后 b.name like '%广州雅薇%' 生效  出现双重数据
      

  4.   

    谢谢askyin()拉!
       恩,我试了你说的.很对,是and 与or的优先级不同而导致的结果.