+ -
当前位置:首页 → 问答吧 → 第一次用存储过程

第一次用存储过程

时间:2011-06-30

来源:互联网

今天遇到了以前项目的查询效率问题,所以决定用存储过程。但是第一次用,没有找到合适的例子。所以请大家帮帮忙。
我有两条查询,需要把结果组合。注意,两条语句必须独立查询,不能把语句组合在一起。因为组合在一起会有效率问题
select id,title,source from content where cid in(9,10)
select id,title,source from content where locate(',9,10,',othercid)>0)

作者: edisonli   发布时间: 2011-06-30

详细说明
select * from (
select id,title,source from content where cid in(9,10)) a,
(select id,title,source from content where locate(',9,10,',othercid)>0)) b

作者: wwwwb   发布时间: 2011-06-30

引用 1 楼 wwwwb 的回复:
详细说明
select * from (
select id,title,source from content where cid in(9,10)) a,
(select id,title,source from content where locate(',9,10,',othercid)>0)) b

不能组合在一起,组合在一起会降低效率,我已经实验过了。所以我才想用存储过程来分开执行然后把结果组合在一起

作者: edisonli   发布时间: 2011-06-30

举例说明 组合在一起 是什么概念

作者: wwwwb   发布时间: 2011-06-30

比如
SQL code

CREATE PROCEDURE `pro1`(IN param VARCHAR(25) charset 'gb2312')
BEGIN
select id,title,source from content where cid in(9,10)
select id,title,source from content where locate(',9,10,',othercid)>0)
END


在存储过程中执行两次select,但是这样做是不正确的

作者: edisonli   发布时间: 2011-06-30

因为我还要把两次查询后相同的数据过滤掉

作者: edisonli   发布时间: 2011-06-30

DELIMITER $$
DROP PROCEDURE IF EXISTS `pro1`$$
CREATE PROCEDURE `pro1`(IN param VARCHAR(25) CHARSET 'gb2312')
BEGIN
SELECT id,title,source FROM content WHERE cid IN(9,10);
SELECT id,title,source FROM content WHERE LOCATE(',9,10,',othercid)>0;
END$$
DELIMITER ;

作者: wwwwb   发布时间: 2011-06-30

学习!

作者: tuyi911   发布时间: 2011-06-30

SQL code
select id,title,source from content where cid in(9,10)
union
select id,title,source from content where locate(',9,10,',othercid)>0)


作者: zuoxingyu   发布时间: 2011-06-30

引用 5 楼 edisonli 的回复:
因为我还要把两次查询后相同的数据过滤掉

DELIMITER $$
DROP PROCEDURE IF EXISTS `pro1`$$
CREATE PROCEDURE `pro1`(IN param VARCHAR(25) CHARSET 'gb2312')
BEGIN
SELECT id,title,source FROM content WHERE cid IN(9,10)
UNION
SELECT id,title,source FROM content WHERE LOCATE(',9,10,',othercid)>0;
END$$
DELIMITER ;

作者: wwwwb   发布时间: 2011-06-30

相关阅读 更多