Подтвердить что ты не робот

MYSQL Left Присоединиться, как выбрать значения NULL?

Это следующий вопрос к моему последнему вопросу о соединениях таблиц в MySQL

Мне нужно иметь возможность выбирать значения NULL из левой объединенной таблицы.

Здесь мое соединение:

table1.id | table1.name | table2.id | table2.surname
        1 |        John |         1 |            Doe
        2 |     Michael |         2 |       Anderson
        3 |        Anna |      NULL |           NULL
        4 |         Sue |      NULL |           NULL

Я хотел бы выбрать WHERE table2.surname = NULL, но такой запрос не работает

SELECT table1.*,table2.*
FROM table1
LEFT JOIN table2
    ON table1.id=table2.id
WHERE table2.surname=NULL

Я могу несколько понять, что логика этого не дает мне никаких результатов, но должен быть способ захватить их результаты?

Оцените любую помощь

4b9b3361

Ответ 1

Чтобы сравнить значения NULL, вы должны использовать предикат IS NULL, например:

SELECT table1.*, table2.*
FROM table1
LEFT JOIN table2 ON table1.id=table2.id
WHERE table2.surname IS NULL

Ответ 2

Вы должны использовать IS NULL вместо = NULL:

WHERE table2.surname IS NULL

Причина, по которой вы не можете просто сделать = NULL, состоит в том, что NULL по существу является "неизвестным" и не может равным или не равно ни к чему (даже не сам), поэтому попытка сравнить его с чем-то, как будто он должен быть точным совпадением, просто возвращает NULL вместо ожидаемого логического 0 или 1, и именно поэтому ваш запрос возвращался пустой результат.

Там четкое различие между "неизвестно" и "равно неизвестно". Вы можете с уверенностью проверить, что неизвестно неизвестно или не, но вы не можете проверить, если что-то "равно" неизвестно, поскольку неизвестно неизвестно, и это не имеет смысла.

Кроме того, поскольку вы используете MySQL, другой вариант заключается в использовании table2.surname <=> NULL, где <=> - это оператор сравнения NULL-Safe, специфичный для MySQL, но старайтесь не использовать его и просто придерживаться стандартного SQL (IS NULL/IS NOT NULL)

Ответ 3

попробуйте:

SELECT table1.*,table2.* 
FROM table1 
  LEFT JOIN table2 ON table1.id=table2.id 
WHERE table2.surname IS NULL

Ответ 4

В соответствии с спецификацией MySQL вы должны использовать "IS NULL" вместо "= NULL". В нем говорится, что "(NULL = NULL) равно NULL". Но NULL равен False, когда он используется как булевский.