3

有没有办法在没有 where 子句的情况下选择非空值?我知道可以这样

SELECT X, Y, Z
FROM T
WHERE X IS NOT NULL

但我想知道是否有办法在不使用 where 的情况下将 null 'filter' 放在 select 子句中

也许是这样的?

SELECT NOT_NULL(X), Y, Z
FROM T

4

5 回答 5

9

不,没有办法,如果你需要过滤掉东西,你需要一个 WHERE 子句。也就是说,您可以使用 ISNULL 或 COALESCE 将返回的值从 null 更改为其他值

于 2013-01-10T12:00:05.737 回答
4

您在寻找 COALESCE 吗?

IE

SELECT COALESCE(HasBananas, 'No') FROM Sometable
于 2013-01-10T12:01:44.933 回答
0

我看不出这样做的合理理由,但如果您真的不想要 WHERE,则可以通过 JOIN 子句进行过滤。

SELECT X, Y, Z
FROM T
JOIN (SELECT null a) Q ON X IS NOT NULL
于 2013-01-10T12:11:51.220 回答
0

为什么不 :) 但是 WHERE 好多了。

这里的技巧是在 JOINON条件下,如果你将任何东西与NULL它进行比较,它总是FALSEeven NULL=NULLis FALSE

SQLFiddle 演示

select * from t 
join 
(
select distinct x from t
) t1 on (t.x=t1.x);
于 2013-01-10T12:16:41.030 回答
0

如果您只想检查一个值是否为 NULL 并在结果中将其作为布尔值返回,那么您可以使用如下内容:

SELECT CASE 
         WHEN X IS NULL THEN 0
         ELSE 1
       END AS XisNull,
       Y, 
       Z
FROM T

如果您只想过滤,请使用 WHERE 语句。它是为它创建的:-)

于 2013-11-27T13:37:31.783 回答