最近在做一个查询时遇到了一个问题如下:
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
最后执行得到正确结果;