#sql #node.js #database #postgresql #express
#sql #node.js #База данных #postgresql #выразить
Вопрос:
Я использую RESTful API с Node.js / Express и базой данных PostgreSQL (версия PostgreSQL 12.4). Я не использую ORM только для прямого SQL. Я пытаюсь создать оператор «SELECT CASE», но продолжаю сталкиваться с ошибками. Сообщения об ошибках, которые я получаю, — «подтвержденный элемент не является столбцом». Может кто-нибудь увидеть, что не так с моим синтаксисом здесь:
var query = ['SELECT *, CASE WHEN confirmed = true THEN "confirmed_member" ELSE "pending" END AS "status" FROM members WHERE groupid = $1']
try {
const member = await pool.query(query, [groupid]);
res.status(200).json(member.rows)
} catch (err) {
res.status(400).json({ message: err.message })
}
Примечание: Запрос отлично работает в Valentina DB.
РЕДАКТИРОВАТЬ: В ответ на ответы ниже я переключился на двойные кавычки, потому что это была ошибка, которую я получал в IDE, когда я использовал одинарные кавычки
Ответ №1:
Используйте одинарные кавычки для строковых литералов в SQL. Некоторые варианты SQL (например, SQLite) также принимают двойные кавычки, но вы не должны полагаться на это поведение.
var query = ["SELECT *, CASE WHEN confirmed = true THEN 'confirmed_member' ELSE 'pending' END AS status FROM members WHERE groupid = $1"];
Комментарии:
1. Я включил изображение, которое показывало ошибку, которую я получал в своей IDE, когда я использовал одинарные кавычки, но ваш ответ дал мне мозговую волну. Я попробую заключить сам запрос в двойные кавычки и попробовать это: var query = [«ВЫБЕРИТЕ *, РЕГИСТР ПРИ подтверждении = true ЗАТЕМ ‘confirmed_member’ ELSE ‘в ожидании’ ЗАКАНЧИВАЕТСЯ КАК ‘статус’ ОТ участников, ГДЕ groupid = $ 1»]
2. Голосую за ваш ответ, потому что это тоже сработало. Я не понимал, что могу написать имя столбца, не заключая его в кавычки. Спасибо
3. @GraSim Также правильно заключать имя столбца в двойные кавычки, но это требуется только в том случае, если имя столбца является зарезервированным ключевым словом SQL, содержит пробелы или является каким-либо иным нестандартным именем.
4. Каждый день узнаешь что-то новое, всю свою жизнь я прилагал свои столбцы. Спасибо, Тим!
Ответ №2:
Для литералов необходимо использовать одинарные кавычки следующим образом:
SELECT *,
CASE WHEN confirmed = true THEN 'confirmed_member' ELSE 'pending' END AS "status"
FROM members WHERE groupid = $1
Комментарии:
1. Я включил изображение, которое показывало ошибку, которую я получал в своей IDE, когда я использовал одинарные кавычки, но ваш ответ дал мне мозговую волну. Я попробую заключить сам запрос в двойные кавычки и попробовать это: var query = [«ВЫБЕРИТЕ *, РЕГИСТР ПРИ подтверждении = true ЗАТЕМ ‘confirmed_member’ ELSE ‘в ожидании’ ЗАКАНЧИВАЕТСЯ КАК ‘статус’ ОТ участников, ГДЕ groupid = $ 1»]
Ответ №3:
Для всех, кто сталкивается с той же проблемой: я заставил его работать, заключив оператор SQL в двойные кавычки и экранировав двойные кавычки для имени столбца.
var query = ["SELECT *, CASE WHEN confirmed = true THEN 'confirmed_member' ELSE 'pending' END AS "status" FROM members WHERE groupid = $1"]