代码之家  ›  专栏  ›  技术社区  ›  Zaynul Abadin Tuhin

多列空校验的优化方法

  •  0
  • Zaynul Abadin Tuhin  · 技术社区  · 5 年前

    假设我有一个包含三列的表,并且我想获取至少有一列值不为null的所有行,现在我使用 coalesce() 下面的方式为空检查,它是工作正常

    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
    

    我想知道有没有更好的方法来做这个空检查

    0 回复  |  直到 5 年前
        1
  •  2
  •   Sebastian Brosch Navjyot    5 年前

    可以通过三种方式检查行中的非空值:

    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

    比较结果:

    • COALESCE 与。 IS NOT NULL
    • 聚结 与。 ISNULL :56%至44%
    • 不为空 与。 为空 :49%至51%

    所以使用 不为空 是检查行中是否有不带空值的列的最快方法。在可读性的情况下 可以比 不为空 为空 比较。你可以在可读性和速度之间做出决定。

        2
  •  1
  •   user11380812 user11380812    5 年前

    ALTER TABLE myTableName
    ADD newColumnName AS (CASE
                        WHEN id IS NULL
                             AND fname IS NULL
                             AND lname IS NULL
                        THEN 0
                        ELSE 1
                    END) PERSISTED
    

    然后您可以轻松地查询您的表

    SELECT 
    *
    FROM myTable 
    WHERE newColumnName = 1