Как применять, когда только столбец не является нулевым в построителе запросов Adonis - PullRequest
0 голосов
/ 15 января 2020

Мне нужно проверить, если столбец percentage_correct> = parCorrect, если percentage_correct <> NULL

Я пытаюсь что-то вроде:

const unidadeSequenceAtualEstudante = await Database.select("*")
            .from("student_quiz_historics")
            .where("student_id", idEstudante)
            .where(function(){
                this
                .whereNotNull("percentage_correct")
                .where("percentage_correct", ">=", parQtdAcerto)
            })
            .where("class_id", idClasse)
            .where("book_id", idLivro)
            .where("execution_back_status", "<>", "Cancelado")
            .orderBy("sequence", "desc")
            .first();

Но когда у меня есть только записи с percentage_correct null, они все еще пытаются применить это где.

1 Ответ

0 голосов
/ 18 января 2020

У меня небольшие проблемы с копированием вашей проблемы. То, что у вас есть, должно работать, но, возможно, вы не учитываете поведение SQL в отношении NULL: что-либо по сравнению с NULL равно NULL, поэтому синтаксис IS NOT NULL существует , Например:

foo=# SELECT 1 >= NULL;
?column?
----------
NULL
(1 row)

foo=# SELECT NULL >= 1;
?column?
----------
NULL
(1 row)

Это означает, что вы можете обойтись без проверки нуля вообще, потому что будут возвращены только строки, соответствующие условию:

const unidadeSequenceAtualEstudante = await Database.select("*")
  .from("student_quiz_historics")
  .where({
    book_id: idLivro,
    class_id: idClasse,
    student_id: idEstudante
  })
  .where('percentage_correct', '>=', parQtdAcerto)
  .where("execution_back_status", "<>", "Cancelado")
  .orderBy("sequence", "desc")
  .first();

Это хорошая идея? Спорно. Я думаю, что это, вероятно, хорошо для этой цели, но мы не должны предполагать, что NULL - это то же самое, что и FALSE, потому что это не так.

Если у вас все еще есть проблемы с вашим запросом вам нужно будет предоставить более подробную информацию о том, какую базу данных вы используете, какова ваша схема и какие ошибки вы получаете.

...