Почему оператор IS NOT NULL возвращает все

Я адаптирую существующий запрос так, чтобы он выбирал только те записи, для которых в поле с проверенными рекомендациями есть дата. Когда я пытаюсь добавить в u.guidelineschecked IS NOT NULL, он все равно возвращает все записи.

SELECT t.id, t.name, t.email, u.guidelineschecked
FROM transcriber t
     JOIN user u
WHERE t.id IN (SELECT tid FROM workertypeidlist WHERE workertypeid = 3)
  AND t.suspended = 0
  AND u.guidelineschecked IS NOT NULL;

Я изменил запрос на:

SELECT t.id, t.name, t.email, u.guidelineschecked
FROM transcriber t
     JOIN user u ON (t.id = u.transcriberid AND u.guidelineschecked IS NOT NULL)
WHERE t.id IN (SELECT tid FROM workertypeidlist WHERE workertypeid = 3)
AND t.suspended = 0;

И это возвращает меньше записей, но все еще есть некоторые записи, которые содержат нулевое значение в проверенном поле.

Я бы предположил, что IS NOT NULL исключит любые поля с нулевым значением. Я новичок в mySQL, поэтому не понимаю, что делаю не так.

Обновлено: Вот изображение результатов консольного запроса. Мне нужны только записи, в которых есть даты.

database results

Хорошо, мой mySQL немного заржавел, однако во втором запросе вы, конечно, сказали, не присоединяйтесь к нему, если guidechecked не равен нулю, но для всех записей, которые не присоединились, они все еще находятся в вашем списке. Я считаю, что оба запроса страдают, так как первый не присоединяется к чему-то конкретному, поэтому, возможно, все строки в t ссылаются на все строки в u. Хотя я уверен, что mySQL поддерживает левое, правое, внутреннее и внешнее соединения, вы, вероятно, могли бы просто получить уберите этот второй запрос и переместите «и u.guidelineschecked is not null» в предложение where после t.suspended = 0, и вы должны получить то, что хотели.

BugFinder 22.05.2019 13:51

Вы уверены, что значения null, а не, например. '' (пустая строка)? Какой тип данных у guidelinechecked?

Solarflare 22.05.2019 13:52

Я немного смущен тем, какое соединение использовать. Я хочу, чтобы все записи в транскрибере, которые имеют рекомендации, были проверены в пользовательской таблице. Можете ли вы помочь мне в этом вопросе?

PortyR 22.05.2019 13:53

В вашем первом соединении отсутствует предложение ON, поэтому вы выполняете перекрестное соединение.

forpas 22.05.2019 13:53

@Solarflare, проверенный тип данных — datetime.

PortyR 22.05.2019 13:54

Можем ли мы увидеть образцы данных и ожидаемые результаты, пожалуйста? Обратите внимание, что NULL — это особый статус. Это не то же самое, что просто «содержит пустую строку, пробел или другой скрытый символ».

ADyson 22.05.2019 14:00

Окрашивание чего-либо прозрачным цветом на самом деле не скрывает основной текст. :D

Mladen Ilić 22.05.2019 14:11

Не думал, что он будет таким прозрачным...

PortyR 22.05.2019 14:12
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
8
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Посоветовавшись с кем-то еще, мы обнаружили, что поле на самом деле заполнено нулями, но отображается как null. Я понятия не имею, почему это происходит, и мой начальник тоже, но мы решили проблему следующим образом:

SELECT t.id, t.name, t.email, u.guidelineschecked
FROM transcriber t
     JOIN user u ON u.transcriberid = t.id
     JOIN (
SELECT tid FROM
    workertypeidlist
WHERE workertypeid = 3
) t2 on t.id = t2.tid
WHERE u.guidelineschecked > '2001-01-01';

Спасибо всем, кто прокомментировал. Я ценю ваше время и мудрость.

Другие вопросы по теме