当前位置: 首页 > 面试题库 >

Sequelize ORM中联接表的条件

岳朝
2023-03-14
问题内容

我想用sequelize ORM获得这样的查询:

SELECT "A".*,      
FROM "A" 
LEFT OUTER JOIN "B" ON "A"."bId" = "B"."id"
LEFT OUTER JOIN "C" ON "A"."cId" = "C"."id"
WHERE ("B"."userId" = '100'
       OR "C"."userId" = '100')

问题是,后遗症不允许我在where子句中引用“ B”或“ C”表。以下代码

A.findAll({
    include: [{
        model: B,
        where: {
            userId: 100
        },
        required: false

    }, {
        model: C,
        where: {
            userId: 100
        },
        required: false
    }]
]

给我

SELECT "A".*,      
FROM "A" 
LEFT OUTER JOIN "B" ON "A"."bId" = "B"."id" AND "B"."userId" = 100
LEFT OUTER JOIN "C" ON "A"."cId" = "C"."id" AND "C"."userId" = 100

这是完全不同的查询和结果

A.findAll({
    where: {
        $or: [
            {'"B"."userId"' : 100},
            {'"C"."userId"' : 100}
        ]
    },
    include: [{
        model: B,
        required: false

    }, {
        model: C,
        required: false
    }]
]

甚至不是有效的查询:

SELECT "A".*,      
FROM "A" 
LEFT OUTER JOIN "B" ON "A"."bId" = "B"."id"
LEFT OUTER JOIN "C" ON "A"."cId" = "C"."id"
WHERE ("A"."B.userId" = '100'
       OR "A"."C.userId" = '100')

使用sequelize是否可以进行第一个查询,还是我应该坚持使用原始查询?


问题答案:

将引用联接表的列包装在 $$

A.findAll({
    where: {
        $or: [
            {'$B.userId$' : 100},
            {'$C.userId$' : 100}
        ]
    },
    include: [{
        model: B,
        required: false

    }, {
        model: C,
        required: false
    }]
});


 类似资料:
  • 问题内容: 我想使用Hibernate的条件api来制定连接两个实体的特定查询。假设我有两个实体,Pet和Owner,拥有者拥有很多宠物,但是关键是关联没有映射到Java批注或xml中。 使用hql,我可以通过在查询中指定联接来选择拥有“ fido”宠物的所有者(而不是将一组宠物添加到owner类)。 可以使用hibernate条件进行相同的操作吗?如果可以,怎么办? 谢谢,J 问题答案: 我的理

  • 嗨,伙计们,我正在使用Laravel5.5,我有两个表,用户和服务 用户表 ID 名称 电子邮件 密码 地址 城市 国家 邮政编码 null 提前谢了。热烈问候:阿卜杜拉·沙希德。

  • 问题内容: 相等的: 左联接: 相等的: 正确加入 相等的: 当我们在“ WHERE”子句中指定联接条件与“ ON联接条件”时有什么区别? 通过在“ ON”子句和“ WHERE”子句中指定联接条件,我们在内部,左外部,右外部联接中是否获得相同的结果。请指教。 问题答案: 好吧,您所谓的“等效”并不等同于外部联接。让我们以左联接为例。 加入条件: 与哪里: 将条件放到WHERE子句中可以有效地使联接

  • 问题内容: 我正在寻找连接2个表并仅显示明细表的最后一条记录的正确SQL代码。 我有一个带有2个表的数据库, 每个交易都有多个评论,但是我想创建一个显示所有交易的视图,并且仅显示每个交易的最后一条评论(由CommentTime确定)字段 问题答案: 编辑:我没有足够接近地阅读初始问题,也没有注意到视图中需要所有DEALS行。以下是我的修改后的答案:

  • 问题内容: 当表较小时,此查询具有合理的时间。我正在尝试确定什么是瓶颈,但是我不确定如何分析结果。 我已经尝试了INNER JOIN’ing和表的方法以及执行INNER SELECT的方法。两者有相同的时间。 这是EXPLAIN的链接:https : //explain.depesz.com/s/9lhr Postgres版本: x86_64-unknown-linux-gnu上的PostgreS

  • 问题内容: 考虑以下两个关系: 连接表ATag没有相应的实体类。现在,我想获取所有名为Tag1的Tag的Foo实例,是否可以仅使用Criteria? 子查询可能会有所帮助,但是,我无法为不存在的类ATag.class创建DetachedCriteria。 问题答案: 只是处理这个确切的问题。您在表中而不是对象中思考。只是参考,让Hibernate负责其余的工作: 如果您看到SQL Hibernat