Я сделаю это с предварительным фильтром на producers
, используя упомянутое условие на первом INNER JOIN
.
SELECT
*
FROM
car
INNER JOIN
( SELECT
producer.*
FROM
producer
INNER JOIN
car ON car.producer = producer.id
GROUP BY
producer.id
HAVING
COUNT(*) >= 10 ) AS p ON p.id = car.producer
INNER JOIN
owner ON car.owner = owner.id
WHERE
owner.email IS NOT NULL
AND
p.email IS NOT NULL
AND
owner.birth_date >= car.produce_year
Кроме того, ограничения на условие where
могут быть переведеныдо joins
чтобы уменьшить запрос следующим образом:
SELECT
*
FROM
car
INNER JOIN
( SELECT
producer.*
FROM
producer
INNER JOIN
car ON car.producer = producer.id
GROUP BY
producer.id
HAVING
COUNT(*) >= 10 ) AS p ON p.id = car.producer AND p.email IS NOT NULL
INNER JOIN
owner ON owner.id = car.owner
AND owner.email IS NOT NULL
AND owner.birth_date >= car.producer_year