我正在尝试在子查询上加入表,但我不知道如何使用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;
答案 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;
第一个没有任何优点。所以,如果第一个提供了想要的结果,第二个也应该提供。