Ich möchte eine Abfrage wie diese mit sequelize ORM erhalten:
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')
Das Problem ist, dass ich in der Where-Klausel nicht auf die Tabelle “B” oder “C” verweisen kann. Folgender Code
A.findAll({
include: [{
model: B,
where: {
userId: 100
},
required: false
}, {
model: C,
where: {
userId: 100
},
required: false
}]
]
gibt mir
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
Das ist eine völlig andere Abfrage und ein Ergebnis von
A.findAll({
where: {
$or: [
{'"B"."userId"' : 100},
{'"C"."userId"' : 100}
]
},
include: [{
model: B,
required: false
}, {
model: C,
required: false
}]
]
ist nicht einmal eine gültige Abfrage:
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')
Ist die erste Abfrage überhaupt mit Sequelize möglich, oder sollte ich mich einfach an Rohabfragen halten?
sehr nützliche Frage!
– Properchels
16. Oktober 2018 um 9:30 Uhr
Aktualisierung der Antwort von (Jan Aagaard Meier), hinzufügen
subQuery=false
Möglichkeit, mit Limit und Offset zu arbeiten– Zuschauer sein
4. Februar 2020 um 6:55 Uhr