怎么解读select c from (values(1),(1)) as d(c);

mQney 2018-09-04 05:00:51
今天看一个窗口函数的书中,有这么一句查询select c from (values(1),(1)) as d(c);
这句怎么解读?可以有什么应用?
...全文
986 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 版主 2018-09-05
  • 打赏
  • 举报
回复
吉普赛的歌 版主 2018-09-05
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('user_data') IS NOT NULL DROP TABLE user_data
GO
CREATE TABLE user_data(
userId INT IDENTITY(1,1) PRIMARY KEY,
userName NVARCHAR(20),
userType INT
)
GO
INSERT INTO user_data(userName,userType) VALUES('小明',1);
INSERT INTO user_data(userName,userType) VALUES('小华',2);
INSERT INTO user_data(userName,userType) VALUES('大牛',3);

SELECT * FROM user_data AS u
INNER JOIN (VALUES(1,'工人'),(2,'农民'),(3,'知识分子')) AS L(userType,userTypeDesc)
ON u.userType=L.userType


比如上面的代码, 用Values 构建虚拟表, 就非常清晰。
当然, 用 CASE WHEN 也可以做到类似的效果, 只是没有虚拟表那么方便。

这个用得不算很多, 不需要在这方面下太多功夫, 知道怎么用, 有这么回事就可以了。
mQney 2018-09-05
  • 打赏
  • 举报
回复
回复“二月十六”:T-SQL性能调优秘笈:基于SQL Server 2012窗口函数
回复“mingqing6364”和“吉普赛的歌”,谢谢解答。这种写法还有什么日常应用的地方?
吉普赛的歌 版主 2018-09-04
  • 打赏
  • 举报
回复
--2008 新语法
select c from (values(1),(1)) as d(c);
--2005 代替写法
SELECT c FROM (
SELECT 1 AS c
UNION ALL
SELECT 1
) AS d

相当于构建一个虚拟表。写法上更优雅。
二月十六 版主 2018-09-04
  • 打赏
  • 举报
回复
楼主看的哪本书?
xiaoxiangqing 2018-09-04
  • 打赏
  • 举报
回复
楼上的正解,这个是新语法
mingqing6364 2018-09-04
  • 打赏
  • 举报
回复
select c from无需解释
(values(1),(1))是一个数据集,两行一列,数据都是1
as d(c)定义成一个表,表名是d,字段名是c

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧