Sequelize:在子查询上加入表

时间:2017-11-07 22:07:55

标签: postgresql sequelize.js

我正在尝试在子查询上加入表,但我不知道如何使用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 :(得分: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;

第一个没有任何优点。所以,如果第一个提供了想要的结果,第二个也应该提供。