Как поместить третье условие в запрос MySQL - PullRequest
0 голосов
/ 08 декабря 2018

Как я могу реализовать этот запрос с условием, что производитель имеет как минимум 10 проданных автомобилей?

SELECT
    *
FROM
    `car`
INNER JOIN
    producer ON car.producer = producer.id
INNER JOIN
    owner ON car.owner = owner.id
WHERE
    owner.email IS NOT NULL
AND
    producer.email IS NOT NULL
AND
    owner.birth_date >= car.produce_year

Три таблицы:

TABLE car
id integer
owner integer
color varchar
type varchar 
producer integer
poduce_time integer

TABLE owner
id integer
first name varchar
last name varchar
address varchar
date_of_birth integer
place_of_birth varchar
email varchar

TABLE producer
id integer
name varchar
address varchar
email varchar

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Я сделаю это с предварительным фильтром на 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
0 голосов
/ 08 декабря 2018

Вы должны использовать COUNT:

SELECT
    *
FROM
    car c
INNER JOIN
    producer ON c.producer = producer.id
INNER JOIN
    owner ON c.owner = owner.id
WHERE
    owner.email IS NOT NULL
AND
    producer.email IS NOT NULL
AND
    owner.birth_date >= c.produce_year
AND 
    (SELECT COUNT(*) FROM car WHERE car.producer = c.producer) >= 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...