#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. Пожалуйста, проверьте, содержат ли ваши ассоциации и варианты вопросов столбец идентификаторов или нет