300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql 表的结果作为表_SQL--如何将Sql语句查询出来的结果作为一个表名 再次进行查询...

mysql 表的结果作为表_SQL--如何将Sql语句查询出来的结果作为一个表名 再次进行查询...

时间:2021-06-05 12:02:03

相关推荐

mysql 表的结果作为表_SQL--如何将Sql语句查询出来的结果作为一个表名 再次进行查询...

最近在做一个能源监控的项目,因为用到从表里获取数据后得知数据存在哪一个表里后,再获取那个表的数据,所以就遇到了一个表名不固定的情况,一开始的方式,是我分两条sql语句来执行:

1.第一条sql 是通过条件来查询数据 ex:tblName(这个数据就是要去调用数据的表名)

select HisTblName,HisFldName from TYcYt where StationId=1 and YcCommDevId=1 and CommDevYcOrder=170

2.第二条语句就是执行select*from tblName........等一些列的语句动作。

select Value1 from THisSampleFiveMinute_1

where SampleTime=(select max(SampleTime) from THisSampleFiveMinute_1 where cast(SampleTime as date)='/3/28 0:00:00')

那么有没有什么方法,可是一句sql语句来实现呢,思路是将第一次查询出来的数据做表名,再次进行查询等动作,答案是有的,那个就是要用的变量的声明、变量的赋值、动态SQL(Exec)这些语句:

关于变量的声明、变量的赋值,可以参看之前写的关于select赋值的文章,这里重点讲下动态SQL(Exec)这一语句的使用方法:

字段名,表名,数据库名之类作为变量时,必须用动态SQL

declare @fname varchar(20)

set @fname = 'FiledName'

Select @fname from tableName -- 错误!不会提示错误,但结果为固定值FiledName,并非所要。

Exec('select ' + @fname + ' from tableName') -- 正确!请注意加号前后的单引号的边上加空格

declare @fldName varchar(32) set @fldName=(select HisFldName from TYcYt where StationId=1 and YcCommDevId=1 and CommDevYcOrder=170)

declare @tblName varchar(32) set @tblName=(select HisTblName from TYcYt where StationId=1 and YcCommDevId=1 and CommDevYcOrder=170)

Exec

(

'select '+@fldName+' from '+@tblName

+' where SampleTime=(select max(SampleTime) from '+@tblName +' where cast(SampleTime as date)=''/3/29 0:00:00'')'

)

这里有一个问题,就是如果sql当中时间是变化的怎么办,想普通sql一样把时间单独独立出来就可以吗?其实是不行的,再动态SQL(Exec)中,必须将时间声明一个变量才可以,不然就会报错:

declare @fldName varchar(32) set @fldName=(select HisFldName from TYcYt where StationId=1 and YcCommDevId=1 and CommDevYcOrder=170)

declare @tblName varchar(32) set @tblName=(select HisTblName from TYcYt where StationId=1 and YcCommDevId=1 and CommDevYcOrder=170)

declare @dt datetime set @dt='/3/29 0:00:00'

Exec

(

'select '+@fldName+' from '+@tblName

+' where SampleTime=(select max(SampleTime) from '+@tblName +' where cast(SampleTime as date)='''+@dt+''')'

)

至此,大功告成-----姜彦 0331

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。