select into tb_temp2 from tb_temp1 创建临时表实现上一个、下一个功能,使用完毕就删除临时表
好久没有写过Sql了,今天遇到一个问题,业务逻辑是:
一个商品可以属于多个分类,在显示商品详情的时候,要求可以点击“上一个”,“下一个” 查看和该商品在同一个分类下的其他商品,商品具有排序号。
这样我就开始写了第一个sql:
select top 1 ROW_NUMBER() over(order by p_order asc) as sno,* from dbo.App_Product
where p_id in
(
select p_id from App_ProductTypeRelation
where pt_id in
(
select pt_id from dbo.App_ProductTypeRelation where p_id=827
)
)
and p_order>(select p_order from App_Product where p_id=827)
但是当我再点击“下一个”的时候,下一个商品所属的分类和上一个的商品所属的分类不同了(商品A:分类1,分类2,商品B:分类2,分类3)
这样就会出现一个新的查询结果,如果我再点击“上一个”,就回不到刚才的商品了,晕了。
后来我就又写了一个sql:
select * from
(
select top 1 ROW_NUMBER() over(order by p_order asc) as sno,* from dbo.App_Product
where p_id in
(
select p_id from App_ProductTypeRelation
where pt_id in
(
select pt_id from dbo.App_ProductTypeRelation where p_id=827
)
)
) as tb1
where sno>(select sno from tb1 where p_id=827)
这样逻辑是对的,但是最后的where语句是不对的,就是where sno>(select sno from tb1 where p_id=827)中的tb1错误,我没查到怎么解决问题,有高手请指教下。
后来我想到,可以把结果放到实际表中,用完删了(过河拆桥)就好了,但是这样的效率肯定不会好,
但是我也想不到怎么解决了,先这么着吧,日后再研究,呵呵,于是就有了下面的Sql:
if exists(select * from sys.objects where name='proc_GetAdjacentWithSameProType')
drop proc proc_GetAdjacentWithSameProType
go
create procedure proc_GetAdjacentWithSameProType
@p_id int=0,
@add_no int=0
as
declare @sql varchar(max)
if exists(select * from sys.objects where name='tb_temp')
drop table tb_temp
select ROW_NUMBER() over(order by p_order asc) as sno,* into tb_temp from dbo.App_Product
where p_id in
(
select p_id from App_ProductTypeRelation
where pt_id in
(
select pt_id from dbo.App_ProductTypeRelation where p_id=@p_id
)
)
select top 1 * from tb_temp where sno=((select sno from tb_temp where p_id=@p_id)+@add_no) order by sno asc
drop table tb_temp
go
exec proc_GetAdjacentWithSameProType 827,-5
用法是传入当前商品的id,这个是固定不变的,点击“下一个”或者“上一个”,永远都是传当前商品的id,
只是第二个参数:当前商品的上下第n个,
1:排序后往下数第一个,
2:排序后往下数第二个
....
-1:排序后往 上 数第一个
-2:排序后往 上 数第二个
.....
欢迎讨论,增加知识
select into tb_temp2 from tb_temp1 创建临时表实现上一个、下一个功能,使用完毕就删除临时表的更多相关文章
- [转]Oracle 修改或者删除临时表 ORA-14452: 试图创建, 更改或删除正在使用的临时表中的索引
本文转自:http://blog.csdn.net/treasurelifelhf/article/details/7290729 由于存储过程出现问题,导致前台页面无法显示数据.执行存储过程发现临时 ...
- sql server创建临时表的两种写法和删除临时表
--创建.删除临时表 --第一种方式 create table #tmp(name varchar(255),id int) --第二种方式 select count(id) as storyNum ...
- MYSQL- 创建和删除临时表
临时表可能是非常有用的,在某些情况下,保持临时数据.最重要的是应该知道的临时表是,他们将当前的客户(www.111cn.net)端会话终止时被删除 当你创建临时表的时候,你可以使用temporary关 ...
- SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除临时表(drop table #tableName)吗?
本文出处:http://www.cnblogs.com/wy123/p/6704619.html 问题背景 在写SQL Server存储过程中,如果存储过程中定义了临时表,有些人习惯在存储过程结束的时 ...
- oracle创建表之前判断表是否存在,如果存在则删除已有表
Mysql 创建表之前判断表是否存在,如果存在则删除已有表 DROP TABLE IF EXISTS sys_area; CREATE TABLE sys_area ( id int NOT NULL ...
- 删除临时表空间ora-25152错误
删除临时表空间,或者收缩临时表空间经常会出现表空间占用等情况. 下面我们就对这种情况进行处理, 首先查找被锁的sid: SELECT a.INST_ID,b.TABLESPACE , b.segfil ...
- input与select 设置相同宽高,在浏览器上却显示不一致,不整齐
遇到 input与select 设置相同宽高,在浏览器上却显示不一致,遂实验了下(IE 10.013 ,Firefox 30.0),得出以下结论 input width,height 值里面, 不 ...
- linux下文件夹的创建、复制、剪切、重命名、清空和删除命令
在home目录下有wwwroot目录,wwwroot下有sinozzz目录,即/home/wwwroot/sinozzz 一.目录创建 在/home/wwwroot目录下新建一个sinozzz123的 ...
- 解决iPhone上select时常失去焦点,随意跳到下一个输入框,影响用户操作
window.addEventListener('load', function() { FastClick.attach(document.body); }, false); //300s延迟,解决 ...
随机推荐
- Redis进阶实践之二如何在Linux系统上安装安装Redis(转载)(2)
Redis进阶实践之二如何在Linux系统上安装安装Redis 一.引言 上一篇文章写了“如何安装VMware Pro虚拟机”和在虚拟机上安装Linux操作系统.那是第一步,有了Linux操作系统,我 ...
- ArcGIS案例学习笔记2_1_山顶点提取最大值提取
ArcGIS案例学习笔记2_1_山顶点提取最大值提取 计划时间:第二天上午 目的:最大值提取 教程:Pdf page=343 数据:chap8/ex5/dem.tif 背景知识:等高线种类 基本等高线 ...
- 内核 platform_get_resource() 函数解析
struct resource *platform_get_resource(struct platform_device *dev, unsigned int type, un ...
- “2017面向对象程序设计(Java)第十一周学习总结”存在问题的反馈及教学安排
“2017面向对象程序设计(Java)第十一周学习总结”存在问题的反馈及教学安排1.“提出表扬的同学:姜依萍,王雪玲,徐楠,相文君,赵晓未提交作业的同学:任红强,王瑞强,宗鹏新,扎西才让,布旦刀杰,范 ...
- sudo su到root或到其它用户报这种错
一般不会出现这种情况,除非你进入的这个目录已经被删了.然后切换用户就找不到这个目录,所以报错. 这种情况下我们只要去到一个正常的目录就好了,比如:cd ~ 然后再切换,ok.
- 3D 模型
http://www.imooc.com/article/12670
- 云笔记项目-测试时无法连接MySQL Server
事情起因:用Mac提交云笔记项目到SVN后,使用台式机import SVN上的云笔记代码,发现到了台式机上,进行junit测试时无法连接Mysql数据库服务器,而Mac上是可以的.以下是报警内容和报警 ...
- 【python】安装pymongo时出错
在python2.7的环境下,使用pip install pymongo安装模块报以下错误: Could not install packages due to an EnvironmentError ...
- SQLdeveloper换成windows主题后不显示的情况
这几天因为换电脑需要重新安装数据库, 因为换成了64位系统, 原先的oracle数据库也换成了64位, 但是plsql还是要用32位的, 经过深思熟虑也没装, 请教了一个同学改用oracle自带的sq ...
- verilog之inout
1.inout 类型的data信号 写操作有效时(rd_wr_l=0):data端口输入信号,此时data为高阻态,允许对其进行赋值. 读操作有效时(rd_wr_l=1):data端口输出信号,此时d ...