用临时内存表解决过滤查询结果集

本文介绍了在遇到需要过滤查询结果集的问题时,如何通过创建临时内存表来提高查询效率。通过创建与原表同名的内存表,并在查询前预处理数据,然后再进行JOIN操作,最终成功解决了查询结果过滤的问题。
摘要由CSDN通过智能技术生成

最近在做一个查询时遇到了一个问题如下:

1.欲得到a表及其关联表的多个结果,之前的工作已经将多个结果返回,类似语句如下

 

CREATE PROCEDURE 

@city varchar(30), 

@keyword varchar(30)

AS

SELECT `a`.`id`, `a`.`img`, `a`.`tag`, `a`.`name`, `a`.`address`, `a`.`tel`, `a`.`vNum`, `a`.`cNum`, `a`.`uid`,`a`.`inid` FROM 

`a_origin` AS `a`

LEFT JOIN `b_origin` AS `b` ON (`a`.`inid` = `b`.`id`)

WHERE

      `a`.`address` = '@city'

      AND `a`.`name` LIKE "%@keyword%"

      OR `b`.`name` LIKE "%@keyword%"

      OR `a`.`id` IN ('53')

     AND `a`.`vNum` > 1

     ORDER BY `Commuser`.`id` ASC

      LIMIT 4

GO

 

2.现在返回的结果是

      汉中

11 ggj.jpg                鱿鱼干锅        XXX 1        西安XXXXXXX  XXXX        679 19 29

51 /img/commer/hy_p1.gif 西餐,牛排,水果沙拉 XXX                西安XXXXXX  XXXX 223 6 198

53 /img/commer/hy_p1.gif 餐饮,美食               XXX                莲湖区XX  XXXXxx8 26 1 205

57 /img/commer/hy_p1.gif 移动,通信,集团,数据 中国XXXX  陕西XXXXXX 1 XXXX                 5 0 264

      成都

11 ggj.jpg                鱿鱼干锅        XXX 1        西安XXXXXXX  XXXX         679 19 29

51 /img/commer/hy_p1.gif 西餐,牛排,水果沙拉 XXX                西安XXXXXX  XXXX 223 6 198

53 /img/commer/hy_p1.gif 餐饮,美食               XXX                莲湖区XX  XXXXxx  8 26 1 205

57 /img/commer/hy_p1.gif 移动,通信,集团,数据 中国XXXX  陕西XXXXXX 1 XXXX                 5 0 264

...

3.现在想要的结果是

      汉中

11 ggj.jpg                鱿鱼干锅        XXX 1        西安XXXXXXX  XXXX          679 19 29

51 /img/commer/hy_p1.gif 西餐,牛排,水果沙拉 XXX                西安XXXXXX  XXXX 223 6 198

53 /img/commer/hy_p1.gif 餐饮,美食               XXX                莲湖区XX  XXXXxx8 26 1 205

57 /img/commer/hy_p1.gif 移动,通信,集团,数据 中国XXXX  陕西XXXXXX 1 XXXX                 5 0 264

      成都

 

21 ggj.jpg                干锅        XXX 1        成都XXXXXXX  XXXX          666 19 29

24 /img/commer/hy_p1.gif 牛排,水果沙拉 XXX                成都XXXXXX  XXXX   221 8 198

27 /img/commer/hy_p1.gif 餐饮              XXX                成都XX  XXXXxx   8 22  6 215

67 /img/commer/hy_p1.gif 移动,集团,数据 中国XXXX  成都 XXXXXX 1 XXXX                 6 1 230

 

4.解决办法:

-------------------------------------------------------------------------------------------

在执行前创建同名的内存表a_origin:

 

CREATE PROCEDURE 

@city varchar(30), 

@keyword varchar(30)

AS

 CREATE TEMPORARY TABLE a_origin TYPE = HEAP

 SELECT `C`.`id` , `C`.`img` , `C`.`tag` , `C`.`name` , `C`.`address` , `C`.`tel` , `C`.`inid` , `C`.`vNum` , `C`.`cNum` , `C`.`uid`

FROM `a_origins` AS C

WHERE `C`.`city` =/' '@ctiy/'';

 

SELECT `a`.`id`, `a`.`img`, `a`.`tag`, `a`.`name`, `a`.`address`, `a`.`tel`, `a`.`vNum`, `a`.`cNum`, `a`.`uid`,`a`.`inid` FROM 

`a_origin` AS `a`

LEFT JOIN `b_origin` AS `b` ON (`a`.`inid` = `b`.`id`)

WHERE

      `a`.`address` = '@city'

      AND `a`.`name` LIKE "%@keyword%"

      OR `b`.`name` LIKE "%@keyword%"

      OR `a`.`id` IN ('53')

     AND `a`.`vNum` > 1

     ORDER BY `Commuser`.`id` ASC

      LIMIT 4

GO

 

最后执行得到正确结果;

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莱登堡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值