如何使用通配符从多个表中搜索值?

时间:2013-02-13 07:08:56

标签: java mysql jsp wildcard

我正在使用JDBC进行外卡搜索。

当我使用单个表时,代码工作正常。

当我尝试使用通配符搜索组合多个表时,代码不起作用。

例如,用户可以搜索任何关键字。

  1. 如果用户搜索“板球”,则可在体育表格中使用cricket关键字
  2. 如果用户搜索“ windows 8 ”,则可在软件表中找到
  3. 如果用户搜索“ google,yahoo ”,则可在网站表中找到关键字
  4. 这是动态输入值:

    where s1(cricket,windows 8,google)
    

    在单人表搜索中,我在体育表中寻找“板球”。

    这是我的查询,工作正常:

    "select * from sports WHERE feed LIKE '%" +s1 + "%'";
    

    我的多表查询不起作用。

        "select * from  product  WHERE sitename LIKE '%"+s1+"%'" "OR 
    
        "select * from  sports     WHERE sitename LIKE '%"+s1+"%'" " OR
    
        "select * from  website  WHERE sitename LIKE '%"+s1+"%'" " OR
    
        "select * from  software  WHERE sitename LIKE '%"+s1+"%'" "OR
    
        "select * from   other   WHERE sitename LIKE '%"+s1+"%'"
    

    此代码有什么问题?

1 个答案:

答案 0 :(得分:2)

尝试使用UNION而不是OR来结束单个语句。通过这种方式,您可以使用相同的列连接多个SQL查询和表。例如:

"select * from  product  WHERE sitename LIKE '%"+s1+"%' UNION 

 select * from  sports   WHERE sitename LIKE '%"+s1+"%' UNION

 select * from  website  WHERE sitename LIKE '%"+s1+"%' UNION

 select * from  software  WHERE sitename LIKE '%"+s1+"%' UNION

 select * from   other   WHERE sitename LIKE '%"+s1+"%'" ;

但请注意!您的单个表必须具有相同的列/ columncount,否则它将无法工作!
也许更好的例子来澄清:

"select sitename, description from  product  WHERE sitename LIKE '%"+s1+"%' UNION 

 select sitename, description from  sports   WHERE sitename LIKE '%"+s1+"%' UNION

 select sitename, description from  website  WHERE sitename LIKE '%"+s1+"%' UNION

 select sitename, description from  software  WHERE sitename LIKE '%"+s1+"%' UNION

 select sitename, text as description from   other   WHERE sitename LIKE '%"+s1+"%'" ;

正如您在Statement 6中所看到的,您可以通过重命名将其他列引用到您的结果,但columncount必须相同。

希望这可以帮到你!