Здесь ваш формат лучше для лучшей читаемости.Слияние используется для передачи по вашим условиям, так что ничто не может быть переопределено.
SELECT analises.*
FROM analises
INNER JOIN dapes ON dapes.id = analises.dape_id
INNER JOIN empresas ON empresas.id = dapes.empresa_id
INNER JOIN areas_atuacao ON areas_atuacao.id = empresas.area_atuacao_id
WHERE analises.atual = 't'
Кажется, .merge()
используется, когда вы присоединяетесь к таблицам, чтобы быть более точным в отношении того, что именно вы присоединяетесь.
В этом случае вы .merge(@dapes)
, кажется, объединяете ваши таблицы со всеми значениями @dapes
.
Один из способов получить лучшее представление о том, какое влияние .merge (@dapes)на ваш запрос, чтобы снова запустить команду to_sql
, как изменился sql.
Сноска
Я взял sql, который был сгенерирован из первого to_sql
, который вы запустили и ввелиэто в Редакторе Scuttle и получил следующие команды рельсов.Я не знаю, помогает ли это, но я просто подумал, что это пища для размышлений!
Analise.select(Analise.arel_table[Arel.star]).where(Analise.arel_table[:atual].eq('t')).joins(
Analise.arel_table.join(Dape.arel_table).on(
Dape.arel_table[:id].eq(Analise.arel_table[:dape_id])
).join_sources
).joins(
Analise.arel_table.join(Empresa.arel_table).on(
Empresa.arel_table[:id].eq(Dape.arel_table[:empresa_id])
).join_sources
).joins(
Analise.arel_table.join(AreasAtuacao.arel_table).on(
AreasAtuacao.arel_table[:id].eq(Empresa.arel_table[:area_atuacao_id])
).join_sources
)