В рельсах у меня есть 2 таблицы:Как выбрать записи, в которых ребенок не существует
bans(ban_id, admin_id)
ban_reasons(ban_reason_id, ban_id, reason_id)
Я хочу найти все bans
для определенного администратора, где нет ни одной записи в таблице ban_reasons
. Как я могу сделать это в Rails, не зацикливая все записи запрета и отфильтровывая все из них с помощью ban.ban_reasons.nil?
. Я хочу сделать это (надеюсь) с использованием одного оператора SQL.
мне просто нужно делать: (Но я хочу, чтобы сделать это «рельсы» путь)
SELECT bans.* FROM bans WHERE admin_id=1234 AND
ban_id NOT IN (SELECT ban_id FROM ban_reasons)
Есть ли разница в производительности между двумя? Получает ли второй результат больше запросов? –
Да, вы получите еще один запрос со вторым ... Я думаю, что проблема с производительностью действительно зависит от вашего размера БД. – Yannis
Я предполагаю, что если целью является использование Rails независимо от стоимости, то предложение работает, но производительность будет ужасно страдать для больших наборов данных. –