sql - 使用两个 AS 变量调用 table 并在 table 只有一行数据时比较它们
问题描述
我试图理解 SQL 中的 AS 函数。
假设我有一个名为的表disaster
,我from
在查询中使用了这个子句
from disaster as D, disaster as D2
我的表灾难只有一行数据,例如表中的一列是dyear
.
如果我尝试像这样检查 D1、D2 之间的相等性
D2.dyear = D1.dyear
他们会平等吗?
如果我有多行数据,它们将不相等,对吗?
谢谢你的协助!
完整代码:
select distinct
D.cname, D.etype, D.dyear
from
disaster as D, disaster as D2
where
D.cname = D2.cname
and D.dyear < (date_part('year', current_date) - 100)
and ((D2.dyear not between D.dyear and D.dyear + 100) or (D2.dyear = D.dyear))
我正在尝试将所有发生灾难的城市比今年至少少 100 年,并且自从那场灾难以来,这个城市至少 100 年不再有灾难
我想试着比较一下D2.dyear
,D.dyear
看看这个城市是否只有一场灾难
解决方案
在您的示例AS
中,只是服务器的保留字,表示以下单词是表的别名。实际上你可以省略它,什么都不会改变。
UPD下一部分仅在where
没有子句的情况下才成立。
用逗号写两个表将产生笛卡尔积,结果将是对应的。它不是比较数据的杠杆,而是连接表的一种方式。
下面是执行此类选择的 SQL Server 中的示例代码。它只返回不到 100 年的最后一场灾难。但是您有第三列etype
,它需要一些额外的代码 - 将其添加到 a 中select
,group by
然后过滤所需的值或其他内容
with t as
(
select cname, datepart(year, dyear) disaster_date
from disaster t
where datepart(year, getdate()) - datepart(year, dyear) >= 100
and not exists (select 1
from disaster
where cname = t.cname
and datepart(year, getdate()) - datepart(year, dyear) < 100)
)
select distinct cname, min(disaster_date) disaster_date
from t
group by cname
推荐阅读
- php - System.xml 中文本字段的 Magento2 setValue()
- model - DDD End Runs,应用层调用另一个不在其正下方的
- android - 删除活动上的 Firebase 侦听器消失?
- sql - 如何在 SQL 案例语句中获取最新的两个日期?
- arduino - Arduino SoftwareSerial 损坏的输出
- google-analytics - 我如何跟踪哪个标签在分析工具中做了什么
- javascript - 通过 babel 配置 webpack 以将 ES2015 JavaScript 捆绑到标准 JavaScript
- c++ - C ++:除了标志添加之外,-O标志究竟做了什么
- pygame - Python中的碰撞检测(pygame)
- amazon-web-services - 使用高可用性 Kubernetes 集群为 kube-api 服务器创建负载均衡器