Оптимизировать способ проверки Null для нескольких столбцов - PullRequest
2 голосов
/ 14 мая 2019

Предположим, у меня есть таблица с тремя столбцами, и я хочу взять все строки, где хотя бы одно значение столбца не равно нулю, сейчас я использую 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

Мне интересно, есть ли лучший способ сделать эту проверку на ноль

Ответы [ 2 ]

2 голосов
/ 14 мая 2019

Проверить строку на ненулевые значения можно тремя способами:

  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%
  • COALESCE противISNULL: от 56% до 44%
  • IS NOT NULL против ISNULL: от 49% до 51%

Таким образом, использование IS NOT NULL - самый быстрый способ проверить,строка имеет столбец без значения NULL.В случае читабельности COALESCE может быть намного короче, чем IS NOT NULL или ISNULL сравнение.Вы можете выбирать между удобочитаемостью и скоростью.

1 голос
/ 14 мая 2019

Вы можете добавить вычисляемый столбец следующим образом:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...