13
我想這樣的查詢與sequelize ORM:凡在Sequelize ORM條件連接表
SELECT "A".*,
FROM "A"
LEFT OUTER JOIN "B" ON "A"."bId" = "B"."id"
LEFT OUTER JOIN "C" ON "A"."cId" = "C"."id"
WHERE ("B"."userId" = '100'
OR "C"."userId" = '100')
的問題是,sequelise不是讓我來引用where子句中的「B」或「C」表。下面的代碼
A.findAll({
include: [{
model: B,
where: {
userId: 100
},
required: false
}, {
model: C,
where: {
userId: 100
},
required: false
}]
]
給我
SELECT "A".*,
FROM "A"
LEFT OUTER JOIN "B" ON "A"."bId" = "B"."id" AND "B"."userId" = 100
LEFT OUTER JOIN "C" ON "A"."cId" = "C"."id" AND "C"."userId" = 100
這是完全不同的查詢,以及
A.findAll({
where: {
$or: [
{'"B"."userId"' : 100},
{'"C"."userId"' : 100}
]
},
include: [{
model: B,
required: false
}, {
model: C,
required: false
}]
]
結果是否定甚至一個有效的查詢:
SELECT "A".*,
FROM "A"
LEFT OUTER JOIN "B" ON "A"."bId" = "B"."id"
LEFT OUTER JOIN "C" ON "A"."cId" = "C"."id"
WHERE ("A"."B.userId" = '100'
OR "A"."C.userId" = '100')
是第一查詢甚至可能與sequeliz e,還是我應該堅持原始查詢? `:
如果我再添包括這一切都無法作爲參考連接表,即'{真正需要}列。然後sequelize使用INNER JOIN在子查詢中放入WHERE子句。因此會生成無效的查詢。 SELECT 「A」。*, FROM(SELECT * 從 「A」 INNER JOIN 「d」 ON 「A」。 「DID」= 「d」, 「ID」 WHERE( 「A」。「B .userId「='100' 或」A「。」C.userId「='100') )as」A「 LEFT OUTER JOIN」B「ON」A「。」bId「=」B「。」 ID「 LEFT OUTER JOIN」C「ON」A「。」cId「=」C「。」id「 如何解決這個問題? – xb1itz
這個$$語法記錄在某處嗎? –
超級實用的功能,沒有在文檔上找到它 – renatoargh