DGKumar Ответов: 1

Как оптимизировать SQL-запрос ?


У меня есть 3 таблицы, как показано ниже
Student 
   	stdId
	stdName
        stdCourseID
StudentCources
        stdCourseID
        courseName
        stdeventID
StudentEvents
        stdeventID
        eventName

я хочу заполнить все эти свойства, как показано ниже
stdId
stdName

stdCourseName

stdEventName

когда я пытаюсь выполнить этот запрос , я получаю дубликаты stdId, stdName и stdCourseID follewd по списку удаляемых элементов corseName и eventName
select * from Student as s WITH(NOLOCK) 
join StudentCources as se WITH(NOLOCK) on sc.stdCourseID = s.stdCourseID 
join StudentEvents as se WITH(NOLOCK) on se.stdeventID = se.stdeventID  
where s.stdId=118


Что я уже пробовал:

select name,courseName,eventName from Student as s WITH(NOLOCK) 
join StudentCources as se WITH(NOLOCK) on sc.stdCourseID = s.stdCourseID 
join StudentEvents as se WITH(NOLOCK) on se.stdeventID = se.stdeventID  
where s.stdId=118

Не могли бы вы рассказать мне, как оптимизировать этот запрос, который должен извлекать все данные

Richard Deeming

Вы использовали se как псевдоним для обоих StudentCources (должно быть "курсы") и StudentEvents Я предполагаю, что это опечатка в вашем вопросе, так как SQL этого не допустит.

Вы также присоединились к StudentEvents таблица сама по себе, а не к таблице курсов:

on se.stdeventID = se.stdeventID 

DGKumar

Извините, что ниже приведен фактический запрос. Требуется ли какая-либо оптимизация для приведенного ниже запроса
выберите имя,имя курса,имя события от студента как s с помощью(NOLOCK)
присоединяйтесь к StudentCources как sc с(NOLOCK) на sc.stdCourseID = s.stdCourseID
присоединяйтесь к StudentEvents как se с(NOLOCK) на se.stdeventID = sc.stdeventID
где s.stdId=118

1 Ответов

Рейтинг:
2

James McCullough

Кроме того, если у Вашего студента нет записи ни в таблице "StudentCources", ни в таблице "StudentEvents", он вернет пустой набор, потому что вы используете подразумеваемое внутреннее соединение.