【发布时间】:2019-04-01 20:09:38
【问题描述】:
假设我的 [Persons] 和 [Phones] 表之间有一个关联表 [PersonPhones]。我运行以下查询:
续集
Person.findAll({
include: [{
model: PersonPhones,
required: false,
include: [{
model: Phones,
required: true
}]
}]
});
问题:
我假设我会得到相当于下面的查询 1,它返回 4 行。但我得到的是查询 2,它只返回 2 行。有没有办法强制 Sequelize 将 INNER JOIN 嵌套在 LEFT JOIN 下?
SQL
CREATE TABLE #Persons (id INT, name VARCHAR(50))
CREATE TABLE #Phones (id INT, number VARCHAR(20))
CREATE TABLE #PersonPhones (personId INT, phoneId INT)
INSERT INTO #Persons VALUES (1,'Adam'), (2, 'Bob'), (3, 'Carl')
INSERT INTO #Phones VALUES (1, '555-1234'), (2, '555-2345'), (3, '555-3456')
INSERT INTO #PersonPhones VALUES (1,1), (1,3), (2, 4)
-- The following are not the same queries
-- Query 1
SELECT *
FROM #Persons p
LEFT JOIN #PersonPhones pp
INNER JOIN #Phones ph ON ph.id = pp.phoneID
ON pp.personID = p.ID
-- Query 2
SELECT *
FROM #Persons p
LEFT JOIN #PersonPhones pp ON pp.personID = p.ID
INNER JOIN #Phones ph ON ph.id = pp.phoneID
【问题讨论】:
标签: sequelize.js