Welcome to the website navigation,本站只接受合法正规的企业网站,欢迎站长们提交你的网站获得展示和流量有任何问题请联系站长,欢迎大家加入本站。

                
提交网站
  • 网站:76083
  • 待审:5
  • APP:577
  • 文章:304411
  • 会员:56004
文字内链包年1000元 文字内链包年1000元 文字内链包年1000元 AI办公网站 AI绘画工具 AIchat

名站网址导航为大家提供关于数据库教程相关的教程网站知识。

设置密码保护的SqlServer网站数据库备份网站网站文件与恢复网站网站文件的具体相关方法cthAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

cthAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

要实现的SQL查询很原始:cthAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

cthAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

cthAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

cthAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

要求从第一个表进行查询得到第二个表格式的数据,上网查询之后竟然能写出下面的SQL:
cthAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

复制具体相关代码 具体相关代码如下:cthAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


select * from userino

SELECT * FROM(
SELECT DISTINCT userpart
FROM userino
)A
OUTER APPLY(
SELECT
[usernames]= replace(replace(replace((SELECT username as value FROM userino N
WhERE userpart = A.userpart order by n.username asc FOR XML AUTO),'"/><N value="','/')
,'<N value="',''),'"/>','')
)N
OUTER APPLY(
SELECT
[username_cns]= replace(replace(replace((SELECT username_cn as value FROM userino M
WhERE userpart = A.userpart order by m.username asc FOR XML AUTO),'"/><M value="','/')
,'<M value="',''),'"/>','')

)M
cthAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


现将SQL进行一下分析:

总共使用到的点有:OUTER APPLY,FOR XML AUTO。由于对SQL Server没有很深的研究,所以记录一下

OUTER APPLY 是SQL2005开始支持的一种查询具体相关方法,类似于连接查询,是将两个查询结果进行拼接,但是奇特的是,使用OUTER APPLY竟然能够在Apply后面的查询中使用前面已经得到的查询结果。

如:

复制具体相关代码 具体相关代码如下:cthAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


select * from
(select * from userino) A
cross join (select username from userino
where username = A.username )B

select * from
(select * from userino) A
join (select username from userino ) B on a.username = b.username

select * from
(select * from userino) A
OUTER APPLY (select username from userino
where username = A.username ) B
cthAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


第一段SQL显然是错的,有两个原因:1.Cross Join本来就是无条件的,2. SQl Server会爆出如下错误:

The multi-part identifier "A.username" could not be bound.

大家可能会说有条件的Join查询本来就不是这样写的,应该写为第二条SQL这样的样子,其实这样写和第三条SQL中使用Outer apply 实现的效果是一样的

可是 Outer Apply还能实现如下的效果

复制具体相关代码 具体相关代码如下:cthAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


select * from
(select * from userino) A
OUTER APPLY (select [value] = a.username 'test' ) B
cthAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


这个恐怕直接使用join就有点麻烦了,上面的例子也许没什么意义,其实SQL2005提出Apply连接具体相关方法主要是为了在连接查询中使用已经执行的查询数据库语句的结果

除了“OUTER APPLY”,SQL Server还有CROSS APPLY,之间的区别主要是在Null值的处理上

FOR XML AUTO 主要用于将SQL的查询结果直接返回成XML数据库语句,For Xml 除了auto外 还有RAW和EXPLICIT,详见《超级简单:使用FOR XML AUTO控制XML输出》

在文章刚开始提出的SQL文,就是使用了上面的两个特性,首先使用Outer Apply来实现类似于使用userpart进行分组的效果,来分别筛选出各个userpart中的user,然后由于筛选出的结果是多行,所以使用 for xml 来把多行数据拼接成xml,最后很二的对xml进行拆分....

综上,感觉这种实现相关方式比较独特,又学习了SQL Server中的一些特性,和大家分享一下

cthAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

关于数据库教程相关的教程网站知识今天我们就说到这里了,希望可以帮到大家。

标签:

分享到:

  网友投稿

注册时间:

网站:0 个   APP:0 个  文章:0 篇

  • 76083

    网站

  • 577

    APP

  • 304411

    文章

  • 56004

    会员

赶快注册账号,推广您的网站吧!
文章分类
热门网站
最新入驻APP小程序

宝贝市场2023-02-08

宝贝市场——买手和卖家商品展示

夺宝助手2023-02-08

夺宝助手小程序,查看每日快夺宝平

查诚信2023-02-08

查诚信是一款免费的商业查询工具

车价天天报2023-02-08

快速连接汽车销售,获知汽车最新报

考勤助理小程序2023-02-08

上班签到考勤,实时定位,后台轻松

汽车报价大全查询2023-02-08

汽车报价大全查询提供最新汽车市