mysql程序无法在表中搜索2列值?

时间:2013-08-31 07:28:59

标签: mysql

我写了这样的查询:

select * from c_course where c_course.cdesc LIKE CONCAT('%',"science",'%')
OR  c_course.cname LIKE CONCAT('%',"science",'%');
cid     cname      cdesc      sdate         edate
'301', 'physics', 'science', '2013-01-03', '2013-01-06'
'303', 'chemistry', 'science', '2013-01-09', '2013-01-09'
'501', 'science', 'natural science', '2013-01-31', '2013-01-09'

工作正常。同样我用这样的存储过程编写:

use lportal;
delimiter //
create procedure pro_search143(IN sname varchar(20))
begin

SET @c = CONCAT('"',sname,'"');

select * from c_course where 

c_course.cdesc LIKE CONCAT('%',c,'%')
OR 
c_course.cname LIKE CONCAT('%',c,'%');

end
//

它正在执行但在调用程序时它会显示如下错误:

CALL pro_search143(“science”); c where子句中的未知列。

任何人都可以修改我的代码并给出解决方案吗?

2 个答案:

答案 0 :(得分:0)

可能是这样的:

 use lportal;
 delimiter //
 create procedure pro_search143(IN sname varchar(20))
 begin

 SET @query = concat('select * 
                      from c_course 
                      where c_course.cdesc LIKE CONCAT(''%'',''',sname,''',''%'') 
                         OR c_course.cname LIKE CONCAT(''%'',''',sname,''',''%'');
                     ');

 PREPARE stmt FROM @query;
 EXECUTE stmt;

 end //

并使用:call pro_search143("science")

答案 1 :(得分:0)

您定义变量@c,但使用c。你错过了@

但为什么不呢

select * from c_course 
where cdesc LIKE CONCAT('%',sname,'%')
OR cname LIKE CONCAT('%',sname,'%');

看看你的例子,你甚至可以做到

select * from c_course 
where sname in (cdesc, cname)

这比使用通配符搜索更好。