- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些代码,希望让它成为一种学习体验。我想问一下select 1是做什么的?
前 5 行看起来像是有人在使用日历函数来获取年、财政季度、财政周,然后提取表中存在的记录。我不确定除了获得年、季度和周信息以及 select 1 内部查询发现某些内容的 1 列之外,您还会得到什么。有人可以帮助我解释返回的内容吗?先感谢您。哦,我应该注意到日历函数可能被用来截断使用日历函数返回的额外数据。有人可能只想要像 2016 年 6 月 1 日这样的内容,而不是显示的分钟和秒数。
这是代码片段:
select calendar, fiscal_yr, fiscal_qtr, fiscal_week from dim_date_weeks
Where exists (select 1 from dim_date cw
where cw.calendar_date_Dateadd(dd, datediff(dd, 0, getdate()), 0)
and weeks.fin_qtr=cq.fin_qtr
and weeks.fiscalweek= cw.fiscal_week
)
union
select dlw.calendar_date, dlw.fiscalyr, dlw.fin_qtr,fiscal_week from dim_date dlw join
(select top 1 lw.fiscal_yr, lw.fin_qtr, fiscal_week from dim_date lw
where lw.calendar=date < (select min(calendar_date)from dim_date_weeks
where exists (select 1 from dim_date cw
where date_Dateadd(dd, datediff(dd, 0, getdate()), 0)
and weeks.fin_qtr=cq.fin_qtr
and weeks.fiscalweek= cw.fiscal_week
)
)
order by lw.calendar_date desc
最佳答案
当然,SELECT 1
只选择 1。在这种情况下,它用于测试是否存在与条件匹配的任何行:如果存在与 WHERE 子句匹配的行,则返回 1,否则不返回任何内容。
这是 WHERE EXISTS
子句中的常见构造,因为除了行存在的字面事实之外,您真的不想返回任何内容。
更详细地查看这个,让我们确切地展示正在发生的事情。
让我们只看第一部分,第二部分足够相似以至于无关紧要。所以你的查询是:
select calendar, fiscal_yr, fiscal_qtr, fiscal_week
from dim_date_weeks
where exists
(select 1
from dim_date cw
where cw.calendar_date_Dateadd(dd, datediff(dd, 0, getdate()), 0)
and weeks.fin_qtr=cq.fin_qtr
and weeks.fiscalweek= cw.fiscal_week
)
weeks
未定义的细节,我们假设它确实是
dim_date_weeks
:
dim_date_Weeks
中选择行。
dim_date_weeks
中的每一行,它正在查询
dim_date
,并查找所有具有与
fin_qtr
中该行的
fin_Qtr
匹配的
weeks
的行,以及与
fiscal_week
中该行的
fiscalweek
匹配的
weeks
的所有行,并且还返回了“true来自该
calendar_date_dateadd
函数(或者那是一个错字,更有可能,并且在
cw.calendar_Date
和 native
DateAdd
函数的结果之间有一些比较)。
exists
返回
true
,并将该行添加到结果集中。如果它不返回任何行,则
exists
返回
false
并且该行不会添加到结果集中。
1
。那是因为它无关紧要。看看
documentation of EXISTS ;它说的是:
Returns TRUE if a subquery contains any rows.
select count()
如果列可以为空并且包含空值,那么它在括号内的内容很重要;在这里,重要的是行。所以作者遵循了一种风格选择,将
1
放在那里。其他人(如 SQL Server 文档)可能会将
select *
放在那里。实际上,您可以选择任何合法的选择。它实际上不会将这些数据放在任何地方;来自内部
EXISTS
查询的任何信息都没有放在结果集中。只是事实是真还是假。
inner join
表和
from
内部查询之间执行
exists
基本相同,只是不从中选择任何内容。因此,如果
cw
每个
weeks
行仅返回一行(如果它们具有一对一的关系),则以下内容或多或少会返回相同的内容:
select weeks.calendar, weeks.fiscal_yr, weeks.fiscal_qtr, weeks.fiscal_week
from dim_date_weeks weeks
inner join
(select 1
from dim_date
where calendar_date_Dateadd(...)
) cw
on cw.fin_qtr=weeks.fin_qtr
and cw.fiscal_week=weeks.fiscalweek
exists
查询的原因。但是你明白了。
1
放在那里,但也可以轻松地放置
*
或
fin_Qtr
或任何其他合法的返回值。您总是可以返回一个常量,在这种情况下,毕竟每个有效行都会返回一个常量。
select 1
from dim_date
top 1000
很大,则将
dim_Date
或其他内容放入其中可能是个好主意。)事实上,如果您对
dim_date
进行了行数计数,并且对这些
1
进行了计数,您将得到相同的数字(如果一切正常)。
关于sql - 选择 1 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40667556/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!