MySQL NULL ошибка запроса SELECT

103
12 декабря 2019, 01:10

Всем привет, пишу парсер расписания. Бывают ситуации когда нету у занятия учителя. Это например дисциплины - Физическая культура и иностранный язык. Потому что люди в разные секции ходят и разные группы посещают, поэтому в источнике для группы у таких занятий нету учителя.

База данных представляет собой 8 различных таблиц и 1 таблица, в которой указаны Id на записи в тех таблицах. Все со связью Один-ко-многим.

Имеется метод, который получает id преподавателя

def get_teacher_id(teacher):
    sql = "SELECT id from teacher where name = %s"
    data = (teacher,)
    rows = select_database(sql, data)
    print("Опа ", rows, teacher)
    if len(rows) == 1:
        return rows[0][0]
    else:
        sql = "INSERT INTO teacher(name) VALUES (%s)"
        return insert_database(sql, data)

Если количество возвращаемых записей равна 1, значит запись уже есть, поэтому мы вернем id, иначе добавим запись и вернем lastrowid.

Сейчас посмотрел полученную после парсинга таблиц, и получилось так, что имеется большое количество записей с NULL (а должно быть 1, это же как бы 1 преподаватель).

Сначала не понял почему так происходит, но потом выполнил запрос к таблице где куча NULL

SELECT
    `id`
FROM `teacher`
WHERE name = NULL;

И он вернул 0 записей, поэтому все добавляются все новые и новые записи, хотя могла быть 1.

Как можно это исправить?

Answer 1

Любая операция с NULL, кроме <=> дает опять же NULL, так что NULL=NULL дает ложь (так же как и NULL!=NULL).

Если значение подставляемое в точку %s действительно NULL, то воспользуйтесь "NULL безопасным сравнением" (<=>) вместо =. А если это пустая строка то напишите для нее отдельное условие вида name=%s OR (%s='' AND name is NULL)

Все операторы сравнения MySQL

READ ALSO
Скорость медленная очень. MySQL база

Скорость медленная очень. MySQL база

Установил Xampp и стартанул через MySQL serverЕсть база, таблицы в форматах *

97
Как отсортировать COUNT() из другой таблицы mysql?

Как отсортировать COUNT() из другой таблицы mysql?

Очень неожиданно возникла проблема с нехваткой знаний в sql(mysql)Времени их пополнить нет

117
Как починить android.os.NetworkOnMainThreadException

Как починить android.os.NetworkOnMainThreadException

ЗдравствуйтеПытаюсь сделать POST запрос на ajax страницу с помощью HttpURLConnection

109
Оформление блоков в CSS Grid [закрыт]

Оформление блоков в CSS Grid [закрыт]

Want to improve this question? Update the question so it's on-topic for Stack Overflow на русском

146