使用内部联接对批量更新进行排序

时间:2018-07-11 00:58:31

标签: postgresql sequelize.js

我目前正在使用Sequelize,无法确定将两个表关联在一起时如何更新批量。我有以下内容:

表格:

members
   user_id
   channel_id
   all

activities
   user_id
   channel_id

当user_ids匹配,members.all为2而members.channel_id不是2时,我正在尝试更新activities.channel_id

这里正在使用Postgresql:

UPDATE members AS m 
   SET    "all" = true 
   FROM   activities AS a 
   WHERE  m.user_id = a.user_id 
      AND m.channel_id = 2 
      AND a.current_channel != 2; 

这可能是续集吗?如何在我的当前更新中包含a.current_channel != 2

Member.update(
        { all: true },
        { where: { channel_id: channelId } },
)

当我尝试添加包含项时,它不起作用。

2 个答案:

答案 0 :(得分:1)

我认为您无法使用Sequelize update方法来做类似的事情。我会在findAll方法中使用include选项,但是据我在documentation上看到的,update方法没有include选项。

您可以使用原始查询直接使用该查询。

sequelize.query("UPDATE members AS m SET "all" = true FROM activities AS a WHERE m.user_id = a.user_id AND m.channel_id = 2 AND a.current_channel != 2").spread((results, metadata) => {
  // Results will be an empty array and metadata will contain the number of affected rows.
});

答案 1 :(得分:0)

通常,我会使用此技巧

models.findAll({
 where: {
 // which models to update
 }
}).then(targets => {
 models.target.update({
 // your updates
},{
 where : {
  target_primary_key: targets.map(t => t.primary_key)
 }
})

})