sql.clear;
sql.add('select DNSCACHE.* from DNSCACHE,WhiteList where DNSCACHE.[Domain] =s1 AND DNSCACHE.Content =s2 or DNSCACHE.[Domain] = WhiteList.White_Keyword');
    Parameters.ParamByName('s1').Value:=StrDomain;
    Parameters.ParamByName('s2').Value:=StrContent;
想表达DNSCACHE中[Domain]和DNSCACHE中Content有相同记录或者WhiteList.White_Keyword 等于 DNSCACHE中Content的记录
这样写正确吗?

解决方案 »

  1.   


    sql.clear; 
    sql.add('select DNSCACHE.* from DNSCACHE,WhiteList where DNSCACHE.[Domain] = :s1 AND DNSCACHE.Content = :s2 or DNSCACHE.[Domain] = WhiteList.White_Keyword'); 
        Parameters.ParamByName('s1').Value:=StrDomain; 
        Parameters.ParamByName('s2').Value:=StrContent; 
    帶上二個冒號。
      

  2.   

    sql语句中的参数要带冒号 ,比如 :s1,:s2
      

  3.   

    但是我觉得很奇怪,查询不出内容,我意思是分开判断的
    DNSCACHE中的Domain和Content 是判断是否有重复,有重复得不进行操作
    再加了或者条件,WhiteList.White_Keyword 等于 DNSCACHE中Content的记录
    两组条件可以单独成立,所以用了OR
    也就是说DNSCACHE中的Domain和Content 是判断是否有重复会显示出来
    WhiteList.White_Keyword 等于 DNSCACHE中Content的记录也会显示出来
      

  4.   

    sql.clear; 
    sql.add('select DNSCACHE.* from DNSCACHE,WhiteList where DNSCACHE.[Domain] =s1 AND (DNSCACHE.Content =s2 or DNSCACHE.[Domain] = WhiteList.White_Keyword)'); 
        Parameters.ParamByName('s1').Value:=StrDomain; 
        Parameters.ParamByName('s2').Value:=StrContent; 
    那就再加一個括號。
      

  5.   

    还是没太明白,不过修改一下语句试试,给条件加上括号
    sql.add('select DNSCACHE.* from DNSCACHE,WhiteList where (DNSCACHE.[Domain] =s1 AND DNSCACHE.Content =s2) or (DNSCACHE.[Domain] = WhiteList.White_Keyword')); 
      

  6.   

    这条语言句好象还不行,因为我要的效果是分开显示也出得来
    这样写好象必须三个条件都满足才能有记录显示,我的要求是想
    select * from DNSCACHE where [Domain] =:s1 AND Content =:s2有内容的话显出记录数
    WhiteList.White_Keyword 等于 DNSCACHE中Content的有内容显示出记录数