Я использую Sequelize 3.30.0 с Postgres. Это запрос, я хочу, чтобы выполнить:Sequelize PG: select with join, order, limit
SELECT works.title, artists.name, artists.relevance
FROM works
JOIN artist_works ON works.work_id = artist_works.work_id
JOIN artists ON artists.artist_id = artist_works.artist_id
WHERE artists.label LIKE '%mozart%'
ORDER BY artists.relevance DESC
LIMIT 50
Это очень просто и работает как шарм, если я делаю это прямо на дб. Однако попытка сделать то же самое с Sequelize не работает (никаких результатов). Это как findAll
варианты выглядеть следующим образом:
Work.findAll({
attributes : ['title'],
include : [{
attributes : [ 'name' ],
model : Artist,
where : { label : { $like : '%mozart%' } },
}],
limit : 50
})
Sequelize сгенерированный запрос очень запутанным:
SELECT "works".*, "artists"."artist_id" AS "artists.artistId", "artists"."name" AS "artists.name", "artists.artist_works"."artist_work_id" AS "artists.artist_works.artistWorkId", "artists.artist_works"."artist_id" AS "artists.artist_works.artistId", "artists.artist_works"."work_id" AS "artists.artist_works.workId", "artists.artist_works"."type" AS "artists.artist_works.type", "artists.artist_works"."artist_id" AS "artists.artist_works.artist_id", "artists.artist_works"."work_id" AS "artists.artist_works.work_id"
FROM (
SELECT "works"."work_id" AS "workId", "works"."title"
FROM "works" AS "works"
WHERE (
SELECT "artist_works"."artist_work_id"
FROM "artist_works" AS "artist_works"
INNER JOIN "artists" AS "artist" ON "artist_works"."artist_id" = "artist"."artist_id"
WHERE ("works"."work_id" = "artist_works"."work_id") LIMIT 1
) IS NOT NULL
LIMIT 50) AS "works"
INNER JOIN (
"artist_works" AS "artists.artist_works"
INNER JOIN "artists" AS "artists" ON "artists"."artist_id" = "artists.artist_works"."artist_id"
) ON "works"."workId" = "artists.artist_works"."work_id" AND "artists"."label" LIKE '%-mozart-%';
Пожалуйста, обратите внимание, что запрос работает, если никаких ограничений не установлено. Кроме того, при попытке добавить параметр order
запрос замерзает. Идеи?
'subQuery: false' решает проблема действительно. Благодаря! –