【问题标题】:PostgreSQL query returning values that are not in my databasePostgreSQL 查询返回不在我的数据库中的值
【发布时间】:2020-10-05 05:51:56
【问题描述】:

我正在构建对我的数据库的查询以返回一些数据。这是上一篇文章的链接,描述了我的意图Finding database data that best fits user variable responses。我想返回每个数据对象的所有列,但是返回的 id 不正确,并且正在返回一个额外的 VALUE 字段。

我的数据库是这样设置的 场地

id  name  parking  decorations  hotel
1   park     1          2         1
2   beach    1          2         2
3   theater  2          2         2
4   yard     2          1         1

还有一个枚举表

id     value
1      TRUE
2      FALSE
3      MAYBE

我正在后端构建一个查询,如下所示:

  let searchConstraintsTrue = 'WHERE';
  let firstItemTrue = 0;
  for (const prop in req.body) {
    if (req.body[prop] === 'TRUE') {
      if (firstItemTrue === 0) {
        searchConstraintsTrue += ` ${prop} = 1`;
        firstItemTrue++;
      } else {
        searchConstraintsTrue += ` AND ${prop} = 1`;
      }
    }
  }

  let searchConstraintsMaybe = 'ORDER BY';
  let firstItemMaybe = 0;
  for (const prop in req.body) {
    if (req.body[prop] === 'MAYBE') {
      if (firstItemMaybe === 0) {
        searchConstraintsMaybe += ` (${prop} = 1)::integer`;
        firstItemMaybe++;
      } else {
        searchConstraintsMaybe += ` + (${prop} = 1)::integer`;
      }
    }
  }

  res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000');
  let sqlText = `SELECT * FROM venues 
  INNER JOIN response_enum rp ON rp.id = venues.parking 
  INNER JOIN response_enum rd ON rd.id = venues.decorations 
  INNER JOIN response_enum rh ON rh.id = venues.hotel 
  ${searchConstraintsTrue} ${searchConstraintsMaybe} DESC`;

我意识到我的 searchConstraintsTruesearchConstraintsMaybe 没有正确使用枚举表,但现在我只是想让事情正常工作。

示例响应如下所示:

[  {
    id: 1,
    name: 'beach',
    parking: 1,
    decorations: 2,
    hotel: 1,
    value: 'TRUE'
  },
  {
    id: 2,
    name: 'yard',
    parking: 1,
    decorations: 2,
    hotel: 2,
    value: 'FALSE'
  }]

所以我返回了所需的数据,但是 id 不正确,并且我的数据库中不存在一个值列。

【问题讨论】:

  • valueid 来自连接表。完全限定您的选择字段。 SELECT v.id, v.name, ... FROM venues v ...
  • 谢谢!这似乎有效

标签: node.js database postgresql backend


【解决方案1】:

SELECT * 将选择连接表中的所有字段。您需要指定一个完全限定的字段名称列表,如下所示:

SELECT v.id,v.name,v.parking,v.decorations,v.hotel FROM venues v 
  INNER JOIN response_enum rp ON rp.id = venues.parking 
  INNER JOIN response_enum rd ON rd.id = venues.decorations 
  INNER JOIN response_enum rh ON rh.id = venues.hotel 
  ${searchConstraintsTrue} ${searchConstraintsMaybe} DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多