【问题标题】:Sequelize: joining table on a subquerySequelize:在子查询上连接表
【发布时间】:2018-04-20 11:07:32
【问题描述】:

我正在尝试在子查询中加入表,但我不知道如何使用 Sequelize ORM 来表达它。这是我要运行的原始 SQL:

SELECT *
FROM table_a a
LEFT OUTER JOIN (SELECT * FROM table_b b WHERE col = VAL) ON a.id = b.id;

我试过了

A.findAll({
    include: [
        {
            model: B,
            where: { col: val },
        }
    ]
}).then(...);

但这并没有得到我想要的查询。相反,它将join 更改为INNER JOIN,并改为加入col = VALUE。有没有办法对子查询的结果进行连接?如果重要的话,我正在使用 Postgres。

更新:进行以下更改后,生成的查询现在按预期使用 LEFT OUTER JOIN:

include: [
    {
        model: B,
        where: { col: val },
        required: false,
    }
]

但是,它仍然加入 col = VALUE,生成的查询看起来像:

SELECT * FROM table_a a 
LEFT OUTER JOIN table_b b ON a.id = b.id AND b.col = VALUE;

【问题讨论】:

    标签: postgresql sequelize.js


    【解决方案1】:

    这两个查询在功能上是等效的:

    SELECT * FROM table_a a
    LEFT OUTER JOIN (SELECT * FROM table_b b WHERE col = VAL) ON a.id = b.id;
    
    SELECT * FROM table_a a 
    LEFT OUTER JOIN table_b b ON a.id = b.id AND b.col = VALUE;
    

    第一个没有任何优势。因此,如果第一个提供了想要的结果,那么第二个也应该如此。

    【讨论】:

    • 如果需要将table_b中的多条记录限制为一条并排序
    • 是的,但这不是这个问题。
    猜你喜欢
    • 2019-01-27
    • 2023-04-01
    • 2015-10-12
    • 2020-04-27
    • 2022-11-11
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2013-12-25
    相关资源
    最近更新 更多