Написать оператор SELECT CASE с помощью PostgreSQL pg и Node JS

#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"]