Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Снова Sql запросы, снова нужна помощь) чего то не получается) Sql Shell

Victoria Ell Ученик (209), закрыт 4 года назад
Необходимо найти всех людей, владеющих любым языком с максимальной оценкой, без повторений

Создание бд вот такое

-- создание и заполнение таблицы Language
create table Language ( ID int primary key,Name text not null);
insert into Language values(1, 'Английский');
insert into Language values(2, 'Немецкий');
insert into Language values(3, 'Французский');
insert into Language values(4, 'Китайский');
insert into Language values(5, 'Корейский');
insert into Language values(6, 'Японский');
insert into Language values(7, 'Тайский');
insert into Language values(8, 'Болгарский');
insert into Language values(9, 'Испанский');
insert into Language values(10, 'Польский');
insert into Language values(11, 'Шведский');
insert into Language values(12, 'Датский');

-- создание и заполнение таблицы Marks
create table Marks ( ID int primary key,Name text not null, Mark int not null, Caption text);
insert into Marks values(1, 'А1',20, 'Начальный уровень');
insert into Marks values(2, 'А2',30, 'Элементарный уровень');
insert into Marks values(3, 'B1',50, 'Слабый средний уровень');
insert into Marks values(4, 'B2',70, 'Выше среднего уровень');
insert into Marks values(5, 'C1',90, 'Продвинутый уровень');

-- создание и заполнение таблицы Person
create table Person ( ID int primary key,Passport_series int not null,
Passport_namber int not null, Surname text not null,
Name text not null,Patronymic text not null,
Date_of_Birtdh date not null, Floor text not null);
insert into Person values(1, 7513,567894, 'Дмитрий','Куплинов','Викторович',' 1999-06-26', 'М');
insert into Person values(2, 7514,230945, 'Александра','Тихонова','Павловна',' 1998-04-04', 'F');
insert into Person values(3, 7518,349021, 'Константин','Сидоров','Николаевич',' 1999-12-08', 'М');
insert into Person values(4, 7516,318096, 'Анастасия','Венгерская','Никифоровна',' 1999-08-29', 'F');
insert into Person values(5, 7517,204060, 'Николай','Михалев','Валерьевич',' 1997-12-31', 'М');

-- создание и заполнение таблицы PersonLand
create table PersonLand ( ID int primary key,ID_Person int references Person(ID),ID_language int references Language(ID),ID_Marks int references Marks(ID));
insert into PersonLand values(1,1,5,2);
insert into PersonLand values(2,1,2,3);
insert into PersonLand values(3,2,10,1);
insert into PersonLand values(4,2,4,4);
insert into PersonLand values(5,2,8,2);
insert into PersonLand values(6,3,9,3);
insert into PersonLand values(7,3,3,1);
insert into PersonLand values(8,4,4,4);
insert into PersonLand values(9,5,11,1);
insert into PersonLand values(10,5,1,3);
insert into PersonLand values(11,5,7,2);
insert into PersonLand values(12,5,6,4);
insert into PersonLand values(13,5,9,2);
Делаю запрос, все выводит верно :
select * from PersonLand where id_marks = ( select MAX (id_marks) from PersonLand ) ; - результат на картинке
Но мне нужно заменить все id, а то как то не оч,
пытаюсь так :
select Person.Name as id from PersonLand left join Person on Person.id = PersonLand.id where id_marks = ( select MAX (id_marks) from PersonLand ) ; Но он выводит лишь одну строку, насколько я знаю, select в selectе возвращает одну строку, но мне нужно 3, как сделать так? - картинка 2
Лучший ответ
クマのプーさん Мудрец (15499) 4 года назад
там написано 3 строки
просто ты выводишь только колонку из Person,
а там одно значение "Венгерская" и два NULL (записи есть в PersonLand, но не связаны с Person)
Victoria EllУченик (209) 4 года назад
Но как два значения могут быть null, если я туда записи делала
Victoria Ell Ученик (209) Причём в коде прописано not null
Остальные ответы
Голова Робота Просветленный (36328) 4 года назад
Если СУБД поддерживает оконные функции, подобные запросы пишутся проще и работают эффективней.
Ошибка в том, что ты неправильно связываешь таблицы PersonLand и Person.
В таблице PersonLand можно было не создавать поле ID. На мой взгляд, оно лишнее.
Похожие вопросы