Я пытаюсь оптимизировать производительность запроса в Active Record.Ранее я выполнял два SQL-запроса, и это должно быть возможно сделать одним.
Это таблицы, к которым я выполняю запросы:
# Table name: notifications
#
# id :integer not null, primary key
# content :text(65535)
# position :integer
# Table name: dismissed_notifications
#
# id :integer not null, primary key
# notification_id :integer
# user_id :integer
Это существующий запрос:
where.not(id: user.dismissed_notifications.pluck(:id))
, который выдает:
SELECT `dismissed_notifications`.`id` FROM `dismissed_notifications` WHERE `dismissed_notifications`.`user_id` = 655
SELECT `notifications`.* FROM `notifications` WHERE (`notifications`.`id` != 1)
Это SQL, который я хотел бы получить, который возвращает те же записи:
select *
from notifications n
where not exists(
select 1
from dismissed_notifications dn
where dn.id = n.id
and dn.user_id = 655)