【问题标题】:Postgres DatabaseError [SequelizeDatabaseError]: syntax error at or near "IN"Postgres DatabaseError [SequelizeDatabaseError]:“IN”处或附近的语法错误
【发布时间】:2021-10-26 07:03:16
【问题描述】:

我有一个应该从数据库中删除记录的端点:

  delete: async(roleId, actionId) => {
    const actionrole = await ActionRoleModel.findAll({
      where: {
        roleId: roleId,
        actionId: actionId
      },
    });
    return await actionrole[0].destroy();
  }

[0] 必须在这里,因为actionrole 看起来像[{...}]。这是模型:

'use strict';
module.exports = (sequelize, DataTypes) => {
  var ActionRole = sequelize.define('actionroles', {
    actionId: {
      type: "UNIQUEIDENTIFIER",
      field: "actionid"
    },
    roleId: {
      type: "UNIQUEIDENTIFIER",
      field: "roleid"
    },
    createdAt: {
      field: "createdat",
      type: DataTypes.DATE
    },
    updatedAt: {
      field: "updatedat",
      type: DataTypes.DATE
    },
  }, {});
  ActionRole.associate = function(models) {
    // associations can be defined here
  };

  ActionRole.removeAttribute('id');

  return ActionRole;
};

但作为终端中的错误,我得到了

DatabaseError [SequelizeDatabaseError]:“IN”处或附近的语法错误

这里是 SQL:

DELETE FROM "actionroles" 
WHERE  IN (
  SELECT  FROM "actionroles" 
  WHERE "roleid" = '53549d62-cd2a-497f-9d1c-1ee1901261ab' AND "actionid" = '6c70bf65-30fd-4640-91d0-8fbda85c4dd5' 
  LIMIT 1)

怎么了?我该如何解决?

【问题讨论】:

  • WHERE IN 错误,缺少表达式。与SELECT FROM 相同。顺便说一句,<expression> IN (<scalar subquery> limit 1)<expression> = (<scalar subquery> limit 1) 是一样的

标签: javascript sql postgresql orm sequelize.js


【解决方案1】:

对于使用 Sequelize 版本 3 及更高版本的任何人,它看起来像:

Model.destroy({
    where: {
        // conditions
    }
})

所以,在这种情况下,它看起来像这样:

return await ActionRoleModel.destroy({
      where: {
        roleId: roleId,
        actionId: actionId
      }
    });

它有效!

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 2021-12-04
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多