【问题标题】:Write SELECT CASE Statement with PostgreSQL pg and Node JS使用 PostgreSQL pg 和 Node JS 编写 SELECT CASE 语句
【发布时间】:2021-01-18 15:43:19
【问题描述】:

我正在使用带有 Node.js/Express 和 PostgreSQL 数据库的 RESTful API(PostgreSQL 版本是 12.4)。我没有使用 ORM,只是直接使用 SQL。我正在尝试创建一个“SELECT CASE”语句,但我一直遇到错误。我收到的错误消息是“confirmed_member 不是列”。谁能在这里看到我的语法有什么问题:

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 中遇到的错误

【问题讨论】:

    标签: sql node.js database postgresql express


    【解决方案1】:

    在 SQL 中对字符串文字使用单引号。某些类型的 SQL(例如 SQLite)也接受双引号,但您不应依赖这种行为。

    var query = ["SELECT *, CASE WHEN confirmed = true THEN 'confirmed_member' ELSE 'pending' END AS status FROM members WHERE groupid = $1"];
    

    【讨论】:

    • 我附上了一张图片,它显示了我在使用单引号时在 IDE 中遇到的错误,但您的回答让我大吃一惊。我将尝试用双引号将查询本身括起来并尝试:var query = ["SELECT *, CASE WHEN confirm = true THEN 'confirmed_member' ELSE 'pending' END AS 'status' FROM members WHERE groupid = $1"]跨度>
    • 支持您的答案,因为这也有效。我没有意识到我可以写 COLUMN 名称而不用引号引起来。谢谢
    • @GraSim 将列名放在双引号中也是正确的,但只有当列名是保留的 SQL 关键字、包含空格或是一些其他非标准名称。
    • 你每天都会学到新东西,我一生都在封闭我的专栏。谢谢蒂姆!
    【解决方案2】:

    您需要对文字使用单引号,如下所示:

    SELECT *,
           CASE WHEN confirmed = true THEN 'confirmed_member' ELSE 'pending' END AS "status" 
      FROM members WHERE groupid = $1
    

    【讨论】:

    • 我附上了一张图片,显示了我在使用单引号时在 IDE 中遇到的错误,但您的回答让我大吃一惊。我将尝试用双引号将查询本身括起来并尝试:var query = ["SELECT *, CASE WHEN confirm = true THEN 'confirmed_member' ELSE 'pending' END AS 'status' FROM members WHERE groupid = $1"]跨度>
    【解决方案3】:

    对于遇到相同问题的任何人:我通过将 SQL 语句括在双引号中并将列名的双引号转义来使其正常工作。

    var query = ["SELECT *, CASE WHEN confirmed = true THEN 'confirmed_member' ELSE 'pending' END AS \"status\" FROM members WHERE groupid = $1"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2023-03-18
      • 2016-05-02
      • 2013-03-23
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多