我写了这样的查询:
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
//它正在执行,但在调用过程时,它显示了如下错误:
调用pro_search143("science");c中的未知列where子句。
有人能修改我的代码并给出解决方案吗?
发布于 2013-08-31 07:31:03
可能是:
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 //with:call pro_search143("science")
发布于 2013-08-31 07:39:13
您定义了一个变量@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)这比通配符搜索的性能要好得多。
https://stackoverflow.com/questions/18545715
复制相似问题