Показывать только пользователям, у которых больше одного автомобиля - PullRequest
0 голосов
/ 02 июня 2019

Уважаемые все, что у меня есть пользователи таблица и автомобили таблица.

и у меня следующий запрос на присоединение :

select 
 users.id as user_id,
 users.username,
 users.job,
 cars.id,
 cars.brand as car_brand

FROM users 
 LEFT JOIN cars on users.id = cars.user_id

GROUP BY users.username, users.id, cars.id;

Вот снимок:

enter image description here

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

Я попробовал код ниже, но он возвращает пустые данные:

enter image description here

Как получить пользователей, которые имеют более одного автомобиля? (имя пользователя: Ismed)

Ответы [ 3 ]

2 голосов
/ 02 июня 2019
You can do in this was as well. 

    select 
     users.id as user_id,
     users.username,
     users.job,
     cars.id,
     cars.brand as car_brand

    FROM users 
     LEFT JOIN cars on users.id = cars.user_id
    where exists (select username, count(*) multiplecars        
    FROM users u
      JOIN cars c on u.id = c.user_id
where users.username = u.username 
     group by 
      u.username 
having count(*) > 1 ) 

Если у пользователей более одного автомобиля (даже если они одного и того же бренда, то это принесет эти записи), если вы хотите, чтобы у пользователей было только одно фирменное обслуживание, вы можете рассчитывать (различно)

1 голос
/ 02 июня 2019

Самый простой и, вероятно, самый производительный метод - использовать оконные функции:

select user_id, username, job, id, brand
from (select u.id as user_id, u.username, u.job,
             c.id, c.brand as car_brand,
             count(*) over (partition by u.id) as num_cars
      from users u join
           cars c
           on u.id = c.user_id
     ) uc
where num_cars > 1;

Обратите внимание, что я изменил left join на join.Если у вас есть два матча, вам требуется матч.Я также ввел псевдонимы таблиц, чтобы легче было писать и читать запрос.

1 голос
/ 02 июня 2019
SELECT users.username
FROM users
WHERE users.id IN(
    select 
    users.id
    FROM users 
    JOIN cars on users.id = cars.user_id
    GROUP BY users.id
    HAVING COUNT(*) > 1
);

Сначала отфильтруйте пользователей, у которых более одного автомобиля, затем получите соответствующие данные

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...