Sql 我正在尝试在Teredata中使用或条件

Sql 我正在尝试在Teredata中使用或条件,sql,teradata,Sql,Teradata,这是我的情况 代码: Select * from table_name where col1 is not null or (col1 is null and col2 = 1) and Col3 in (1,2,3,4); 这对我不起作用,它只在我使用括号中的条件时起作用 代码: 有人能帮助理解或条件是如何工作的吗?我怀疑当您的查询运行时,它不会生成您期望的结果集。尝试添加更有意义的括号: SELECT * FROM table_name WHERE (col1 IS NOT

这是我的情况

代码:

Select * 
from table_name 
where col1 is not null
or (col1 is null and col2 = 1) 
and Col3 in (1,2,3,4);
这对我不起作用,它只在我使用括号中的条件时起作用 代码:


有人能帮助理解或条件是如何工作的吗?

我怀疑当您的查询运行时,它不会生成您期望的结果集。尝试添加更有意义的括号:

SELECT *
FROM table_name
WHERE
    (col1 IS NOT NULL OR col2 = 1) AND
    col3 IN (1,2,3,4);

col1
上的空检查和
col2
上的备份检查似乎属于同一类,因此它们都应该发生在括号内。并不是说您不需要检查
col1是否为NULL
,因为如果非NULL检查失败,它将自动意味着
col1
为NULL。

我怀疑当您的查询确实运行时,它不会生成您期望的结果集。尝试添加更有意义的括号:

SELECT *
FROM table_name
WHERE
    (col1 IS NOT NULL OR col2 = 1) AND
    col3 IN (1,2,3,4);

col1
上的空检查和
col2
上的备份检查似乎属于同一类,因此它们都应该发生在括号内。并不是说你不需要检查
col1是否为NULL
,因为如果非NULL检查失败,它自动意味着
col1
为NULL。

任何时候你在没有括号的
WHERE
子句中混用
都是在自找麻烦。像这样使用
会有效地否定
,并且
会给您带来意想不到的结果

检查只意味着返回“left”条件或“right”条件计算结果为
TRUE的行。在没有括号的情况下,如果
条件的计算结果为
TRUE
,则查询将始终返回行,并将忽略(…)
检查中的
和col3

我猜你想要更像这样的东西:

SELECT *
FROM table_name
WHERE (
  col1 IS NOT NULL OR
  (col1 IS NULL AND col2 = 1)
)
AND col3 IN (1,2,3,4);

这将收紧
col1
周围的逻辑,同时在
col3

上保留过滤器,无论何时您将
以及
混合在
WHERE
子句中(不带括号),这都会给您带来麻烦。像这样使用
会有效地否定
,并且
会给您带来意想不到的结果

检查只意味着返回“left”条件或“right”条件计算结果为
TRUE的行。在没有括号的情况下,如果
条件的计算结果为
TRUE
,则查询将始终返回行,并将忽略(…)
检查中的
和col3

我猜你想要更像这样的东西:

SELECT *
FROM table_name
WHERE (
  col1 IS NOT NULL OR
  (col1 IS NULL AND col2 = 1)
)
AND col3 IN (1,2,3,4);

这将收紧
col1
周围的逻辑,同时保留
col3
上的过滤器定义“这对我不起作用”。你收到错误信息了吗?你这是什么意思?请以格式化文本而不是图像的形式共享示例数据和预期结果。另外,您正在使用的
SQL
数据库只是一种语言。当您将其更改为
时会发生什么情况,其中col1不为null或(col1为null,col2=1,Col3在(1,2,3,4))中)
?@Sami标题是Teradata,所以我假设是这样。@TimBiegeleisen是的,我只是不相信新用户写了什么并再次询问他们,因为他们通常不知道什么是DBMS或SQL Server不是MySQL。因此,我再次要求澄清。定义“这对我不起作用”。你收到错误信息了吗?你这是什么意思?请以格式化文本而不是图像的形式共享示例数据和预期结果。另外,您正在使用的
SQL
数据库只是一种语言。当您将其更改为
时会发生什么情况,其中col1不为null或(col1为null,col2=1,Col3在(1,2,3,4))中)
?@Sami标题是Teradata,所以我假设是这样。@TimBiegeleisen是的,我只是不相信新用户写了什么并再次询问他们,因为他们通常不知道什么是DBMS或SQL Server不是MySQL。因此,我再次要求澄清,“惹麻烦”的原因是布尔逻辑的优先顺序
NOT-And-OR
:-),而“惹麻烦”的原因是布尔逻辑的优先顺序
NOT-And-OR
:-)