Упорядочить запрос, принять все значения в условии where

#node.js #sequelize.js

Вопрос:

У меня есть array=[1,2,3]

Только 1 amp; 2 находятся в базе данных под столбцом ID .

Когда я выполняю запрос, используя WHERE IN его, он дает мне результат 1 amp; 2 .

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

Я использую Sequelize. Как это можно сделать? Запрос:

  Models.Question.findOne({
                where: {
                    id:1
                },
                include: [{
                        model: Models.QuestionOptions,
                        as: 'options',
                        required: true,
                        where: {
                           id:[1,2,3]
                        }
                }]
            });
 

ожидайте результата Null , потому 1 что в базе данных есть только amp; 2

Комментарии:

1. Не могли бы вы поделиться данными тестирования и ожидаемым результатом ?

2. вопрос обновлен

Ответ №1:

require:true означает INNER JOIN . Другими словами, он будет возвращать только строки с существующими ассоциациями(если, конечно, условие также верно). Вы должны удалить его, если хотите получить все строки(соединение слева), даже если соответствующей ассоциации нет

Ответ №2:

Вы можете достичь этого с помощью предложения group и having.

   Models.Question.findOne({
    attributes: ["id"],
    where: {
        id:1
    },
    group: ['id'],
    having: sequelize.where(sequelize.fn('count', sequelize.col('options.id')), {
      [sequelize.Op.gte]: 3,
    }),
    include: [{
            model: Models.QuestionOptions,
            as: 'options',
            attributes: [],
            required: true,
            where: {
               id:[1,2,3]
            }
    }]
});
 

Комментарии:

1. Говорят, Неизвестная колонка ‘options.id предложение» в «, имеющее

2. Пожалуйста, проверьте, содержат ли ваши ассоциации и варианты вопросов столбец идентификаторов или нет