一尘不染

优化多列的空检查方式

sql

假设我有一个包含三列的表,并且我想采用其中至少一个列值不为null的所有行,现在我正在使用coalesce()以下方式进行null检查,并且工作正常

with Test_name AS(

    select null as id , null as f_name , null as l_name
    union ALL
    select 1,'fname1', null
    union ALL
    select null,null,null
) select tn.* from Test_name tn where coalesce(id,f_name,l_name) is not null

预期的输出,这给了我我的查询

1,'fname1', null

我想知道还有没有更好的方法来执行此null检查


阅读 209

收藏
2021-03-08

共1个答案

一尘不染

您可以通过三种方式检查行中是否为非NULL值:

  1. COALESCE(col1, col2, col3) IS NOT NULL
  2. col1 IS NOT NULL OR col2 IS NOT NULL OR col3 IS NOT NULL
  3. ISNULL(col1, ISNULL(col2, ISNULL(col3, NULL))) IS NOT NULL

您可以使用Microsoft SQL Server Management Studio来比较多个查询。

比较结果:

  • COALESCE对比IS NOT NULL:57%至43%
  • COALESCEISNULL:56%至44%
  • IS NOT NULLISNULL:49%至51%

因此,使用IS NOT NULL最快的方法来检查行是否具有不带NULL值的列。在可读性的情况下,COALESCE可以比aIS NOT NULLISNULL比较短得多。您可以在可读性和速度之间做出选择。

2021-03-08