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
:-)