@immelnikoff
Изучаю БД

Как LEFT JOIN-ом присобачить только одну сроку, причем не любую, а наибольшую по данному полю?

Пусть имеется две таблицы:
Сlients
-------
Ivan
Anna
Rita

Telephones
-------------
Ivan | 854
Ivan | 921
Rita | 321
Anna | 111

К первой табличке нужно приджойнить только один номер для каждого клиента, причем наибольший среди номеров этого клиента.
То есть, нужно получить:
Ivan | 921
Anna | 111
Rita | 321.
Подскажите, пожалуйста, как это сделать?
  • Вопрос задан
  • 328 просмотров
Решения вопроса 1
@Vitsliputsli
select
        u.*,
        ph.phone_max
    from users u
    left join (
        select 
                user_id, max(phone) phone_max
            from phones 
            group by user_id
    ) ph on u.user_id=ph.user_id
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Если вам нужен исключительно номер телефона из присоединяемой таблицы и ничего больше, то подойдет подзапрос как свойство с использованием max.
select C.Name,
(select max(T.Phone) from Telephone T where T.Name = C.Name) Max_Phone
from Clients C

PS: Если это практическая задача, а не теоретическая-разминочная, то должно смутить использование имени клиента как первичного ключа в таблице клиентов и как внешнего ключа в таблице телефонов. На практике, обычно, для связки таблиц используются идентификаторы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы