首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有在where子句中使用参数时,才能将误差除以零

只有在where子句中使用参数时,才能将误差除以零
EN

Stack Overflow用户
提问于 2018-09-11 09:56:57
回答 1查看 237关注 0票数 0

有两个表,外部表A视图表B。外部表中的数据通过Polybase连接到Hadoop。视图表合并了所有外部表A和其他外部表(类似的A)。

例如:

代码语言:javascript
复制
A:
--------------------
number  | time
--------------------
0       |2018-09-10
1       |2018-09-10
2       |2018-09-10
--------------------

B:
--------------------
number  | time
--------------------
0       |2018-09-10
1       |2018-09-10
2       |2018-09-10
3       |2018-09-11
--------------------

现在,我不知道为什么下面的SQL使结果不同?

在这些SQL中,我发现不同的执行顺序。在案例1& 2中,首先执行"select 5.0/number“。在案例3& 4中,首先执行where子句。

案例1

代码语言:javascript
复制
DECLARE @date datetime ='2018-09-10';
select 5.0/number  
from A 
where time = @date and number > 0 

Result: 
Cannot execute the query "Remote Query" against OLE DB provider "SQLNCLI11" for linked server "(null)". [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Divide by zero error encountered.

案例2

代码语言:javascript
复制
DECLARE @date datetime ='2018-09-10';
select 5.0/temp.number 
from
(
    select number as number 
    from A
    where time = @date and number > 0 
)temp

Result: 
Cannot execute the query "Remote Query" against OLE DB provider "SQLNCLI11" for linked server "(null)". [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Divide by zero error encountered.

案例3

代码语言:javascript
复制
select 5.0/number 
from A 
where time = '2018-09-10' and number > 0 

Result:
5.0
2.5

案例4(来自B)

代码语言:javascript
复制
DECLARE @date datetime ='2018-09-10';
select 5.0/number  
from B
where time = @date and number > 0 

Result:
5.0
2.5

谢谢!!

EN

回答 1

Stack Overflow用户

发布于 2018-09-11 11:23:42

这也会产生错误吗?

代码语言:javascript
复制
DECLARE @date datetime ='2018-09-10';
select 5.0/temp.number 
from
(
    select time, number
    from A
    where number > 0 
)temp
where temp.time = @date
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52273337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档