У меня есть таблица A, которая соединена с таблицей B «ИСПОЛЬЗОВАНИЕ» column_1. Я хочу запрос, чтобы показать все строки в таблице A, где значение в column_2 не равно ни одному из значений в column_2, column_3 или column_4 из объединенной строки в таблице В.Обработка NULL при использовании оператора NOT EQUAL
Итак, я попытался с помощью:
WHERE
A.column_2 <> B.column_2 AND
A.column_2 <> B.column_3 AND
A.column_2 <> B.column_4
Теперь, если каждая ячейка в B.column_2, B.column_3 и B.column_4 имеет некоторое значение, проверка запроса будет работать, и она отобразит все строки в таблице A, где значение в A.column_2 не имеет соответствует таблице B.
Проблема возникает, если некоторые из ячеек таблицы B имеют значение NULL. Тогда результаты не будут возвращены. Это, кажется, потому что MySQL рассматривает следующий быть ЛОЖЬ:
23 <> NULL
... И так как запрос ищет те случаи, когда все проверки возвращают TRUE, она ничего не возвращает.
Следующее - это работа, которую я использовал, разместив столбцы таблицы B, обернутые вокруг с помощью IFNULL, где значение IFNULL равно 0. По существу это преобразует все эти NULL-ячейки в 0 ... и, следовательно, проверку NOT EQUAL будет правильно возвращать TRUE, если совпадений нет, и отобразятся строки, указанные в таблице A. Код выглядит так:
WHERE
A.column_2 <> IFNULL(B.column_2, 0) AND
A.column_2 <> IFNULL(B.column_3, 0) AND
A.column_2 <> IFNULL(B.column_4, 0)
Это, кажется, круглый способ справиться с этим. Есть ли лучший способ справиться с этим?
вы можете использовать функцию Coalesce –
@Jordan IFNULL() в значительной степени так же, как сливаются(), просто ограниченное 1 значением. – Shadow