这是我的病情
代码:
Select *
from table_name
where col1 is not null
or (col1 is null and col2 = 1)
and Col3 in (1,2,3,4);
这对我不起作用,仅当我在Bracket中使用Condition时才起作用 代码:
Select *
from table_name
where (
col1 is not null or
(col1 is null and col2 = 1)
)
and Col3 in (1,2,3,4);
任何人都可以帮助了解OR条件的工作原理吗?
答案 0 :(得分:0)
我怀疑虽然查询确实在运行,但是它不会生成您期望的结果集。尝试添加更有意义的括号:
SELECT *
FROM table_name
WHERE
(col1 IS NOT NULL OR col2 = 1) AND
col3 IN (1,2,3,4);
col1
上的null校验和col2
上的备份校验似乎在一起,因此它们都应放在括号内。并不是说您不需要检查col1 IS NULL
,因为如果非null检查失败,它将自动意味着col1
为null。
答案 1 :(得分:0)
每当您在AND
子句中混合使用OR
和WHERE
而没有括号时,您就容易陷入麻烦。像这样使用OR
有效地使AND
无效,将会为您带来意想不到的结果。
OR
检查仅意味着返回“左”条件或“右”条件的值为TRUE
的行。对于没有括号的情况,如果OR
条件的值为TRUE
,则查询将始终返回行,并且将忽略AND col3 IN (...)
检查。
我猜你想要更多这样的东西:
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
上的过滤器。