У меня есть рабочий запрос в MySQL, но при тестировании Jest выдает следующую ошибку:
У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования около
FROM(SELECT
f.user' at line 4
пустая строка между SELECT и f.user - это шаблон $ {querySubSelect}
но по какой-то причине Джест не прочитал ссылку на querySubSelect.
поэтому запрос должен выглядеть так:
FROM (SELECT SUBSTRING(SUBSTRING(f.answers, 1, 2), 2) AS Answer1,
SUBSTRING(SUBSTRING(f.answers, 2, 3), 3) AS Answer2,
SUBSTRING(SUBSTRING(f.answers, 3, 4), 4) AS Answer3,
SUBSTRING(SUBSTRING(f.answers, 4, 5), 5) AS Answer4,
SUBSTRING(SUBSTRING(f.answers, 5, 6), 6) AS Answer5,
f.userid,....
и мой полный запрос:
let querySelect = ``
for (var i = 1; i <= answersLength; i++) {
if (i == answersLength) {//last entry should be without ","
querySelect += `ROUND(AVG(Answer${i}), 1) AS avg${i} `
} else {
querySelect += `ROUND(AVG(Answer${i}), 1) AS avg${i}, `
}
}
//set yo the Sub select parameter for query
let querySubSelect = ``
for (var i = 1; i <= answersLength; i++) {
querySubSelect += `SUBSTRING(SUBSTRING(f.answers, ${i}, ${i + 1}), ${i + 1}) AS Answer${i},`
}
const counselorAvgAnswer = await UserModel.sequelize.query(`
SELECT
name, ${querySelect}
FROM
(SELECT
${querySubSelect}
f.userid AS clientid
FROM
user AS u, feedback AS f
WHERE
u.id = f.userid
AND u.role IN ('counsellor' , 'leader')) AS feedbackSubQuery,
user AS user
WHERE
clientid = user.id
GROUP BY clientid
ORDER BY name ASC`)
.then(e => { return e[0] })
запрос отлично работает в моем коде, но когда я запускаю тесты Jest, он прерывает все тесты с той же ошибкой, которую я поставил сверху