【问题标题】:How can I do self join in Sequelize?我如何在 Sequelize 中进行自我加入?
【发布时间】:2019-04-17 23:15:49
【问题描述】:

我有一个具有两个属性的参与模型:cid 用于对话 ID,uid 用于用户 ID。

我有这个查询:

SELECT tA.cid
FROM participation tA, participation tB
WHERE tA.uid = "aaa" AND tB.uid = "aab" AND tA.cid = tB.cid;

它将返回两个用户都参与的对话的 ID - 只有对话包括两个用户。

已编辑:对话模型和用户模型通过参与模型具有 belongs-To-Many 关联。

那么如何在 Sequelize 中进行查询呢?我可以使用include吗?

participation.findAll({
  include: [{
    model: participation
  }]

  //Other options...
})

【问题讨论】:

  • 不,这不是我的情况。
  • 是的,您仍然需要先对表本身进行关联,然后才能进行查询。
  • 我需要什么类型的关联?如果我不想在表本身上进行关联,有什么解决方案吗?

标签: javascript sql node.js sequelize.js


【解决方案1】:

如果您通过使用“具有多个”或“属于多个”关系定义的单独模型连接 ID,则将使用包含。然后你可以试试这样的:

conversation.findAll({
      where: {
      [Op.and]: [{uid: "aaa"}, {uid: "aab"}]
      include: [{
        model: user,
        through: {
          attributes: ["uid", "cid"]
        }
      }]
    })


Otherwise you could try something like this:

participation.findAll({
  where: {
    [Op.and]: [{uid: "aaa"}, {uid: "aab"}]
  }
});

【讨论】:

  • 对话模型和用户模型通过参与模型具有belongs-To-Many关联。而您的第二个解决方案将不会返回任何内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 2015-08-16
相关资源
最近更新 更多