Как не использовать внутренний выбор

#sql #select

#sql #выберите

Вопрос:

 select  student_surname, 
        student_name,
        student_recordbook,
        student_kurs,
        student_state,
        student_dep_id,
        student_kafedra_id
from
     student
where student_studgroups = (select studgroups_number
                            from studgroups 
                              join study on study_studgroups_id = studgroups_id
                            where studgroups_year != study_kurs
                              and study_state_id IN (1,2,3,4,5,6,7,21,22,23,24));
  

Мне нужно оптимизировать его без подзапроса.

Спасибо.

Комментарии:

1. Что вы хотите оптимизировать?

2. Вместо изображения, если вы поместите здесь фактический код, это будет легко понятно

3. Что не так с вложенным запросом? Обратите внимание, что ваш запрос завершится ошибкой, если вложенный запрос вернет более одной строки. Возможно, вы захотите изменить student_studgroups = ( на student_studgroups IN (

Ответ №1:

Вы можете попробовать, как показано ниже-

 select * from student a 
inner join student_groups b on a.student_studgroup=b.studgroups_number
inner join study on study_studgroup_id=stud_Group_id
where (your condition --)
  

Ответ №2:

Пожалуйста, попробуйте это..

 select * 
from student s 
  join studgroups sg on (s.studygroups = sg.studgroups_number) 
  join study st on (sg.studgroupys_id = st.study_studgroups_id) 
where sg.studgroups_year !=s.study_kurs 
  and s.study_state_id IN (1,2,3,4,5,6,7,21,22,23,24);
  

То, что я сделал здесь, я объединил все три таблицы с помощью primary и foriegn key .

Таким образом, вы можете получить тот же результат, используя JOIN, что и при использовании подзапроса.

Комментарии:

1. Это возвращает другой результат.