首页 文章

Sequelize:在子查询上加入表

提问于
浏览
1

我试图加入子查询表,但我不知道如何使用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;

1 回答

  • 0

    这两个查询功能相同:

    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;
    

    从第一个开始就没有任何优势 . 所以,如果第一个提供想要的结果,那么第二个也应该提供 .

相关问题