Как мне написать SQL-запрос, который возвращает записи из таблицы A
, только если каждая связанная запись из таблицы B
соответствует условию?
Я работаю в Ruby, и я могу закодировать эту логику для простой коллекции, например, так:
array_of_A.select { |a| a.associated_bs.all? { |b| b.matches_condition? } }
Я работаю над созданием, потому что я работаю над общим инструментом, который будет использоватьсяв ряде различных ситуаций.
Я знаю, что случай INNER JOIN
является эквивалентом
array_of_A.select { |a| a.associated_bs.any? { |b| b.matches_condition? } }
Я пробовал оба:
SELECT DISTINCT "A".* FROM "A"
INNER JOIN "B"
ON "B"."a_id" = "A"."id"
WHERE "B"."string' = 'STRING'
, а также:
SELECT DISTINCT "A".* FROM "A"
INNER JOIN "B"
ON "B"."a_id" = "A"."id"
AND "B"."string' = 'STRING'
В обоих случаях (как я и ожидал) он возвращает записи из таблицы A
, если любая связанная запись из B
соответствует условию.Я уверен, что есть относительно простое решение, но мое понимание SQL просто не дает мне его в данный момент.И все мои поиски через SO и Google оказались бесплодными.