Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помогите улучшить запрос / 4 сообщений из 4, страница 1 из 1
23.12.2017, 13:45
    #39574808
Alexey Furmanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите улучшить запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT u.*, a.* FROM User u
        JOIN Applicant a ON a.id = u.id
WHERE u.Role_id = '3'
        AND exists (select * from ApplicantArea where Applicant_id = u.id AND ProfessionalArea_id = '10')
        AND exists (select * from ApplicantArea where Applicant_id = u.id AND ProfessionalArea_id = '13')
        AND exists (select * from ApplicantRegion where Applicant_id = u.id AND (Region_id = '1' OR Region_id = '4'))
        AND exists (select * from ApplicantSkill where Applicant_id = u.id AND (Skill_id = '1' AND experience >= '1'))
        AND exists (select * from ApplicantSkill where Applicant_id = u.id AND (Skill_id = '3' AND experience >= '1'))
        AND exists (select * from ApplicantSkill where Applicant_id = u.id AND (Skill_id = '4'))
        AND minSalaryExpectation BETWEEN '1000' AND '10000';


работать, вроде, работает, но как-то раздражает количество correlated subqueries, чувствую, что можно как-то с JOIN улучшить, но не могу сообразить как... выглядит как довольно типичная задача. Помогите, пожалуйста!
...
Рейтинг: 0 / 0
23.12.2017, 14:27
    #39574819
Alexey Furmanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите улучшить запрос
кажется вот так получилось
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT u.*, a.* FROM User u
        JOIN Applicant a ON a.id = u.id
        JOIN ApplicantArea aa1 ON aa1.Applicant_id = u.id AND aa1.ProfessionalArea_id = '10'
        JOIN ApplicantArea aa2 ON aa2.Applicant_id = u.id AND aa2.ProfessionalArea_id = '13'
        JOIN ApplicantRegion ar1 ON ar1.Applicant_id = u.id AND (ar1.Region_id = '1' OR ar1.Region_id = '4')
        JOIN ApplicantSkill as1 ON as1.Applicant_id = u.id AND (as1.Skill_id = '1' AND as1.experience >= '1')
        JOIN ApplicantSkill as2 ON as2.Applicant_id = u.id AND (as2.Skill_id = '3' AND as2.experience >= '1')
        JOIN ApplicantSkill as3 ON as3.Applicant_id = u.id AND (as3.Skill_id = '4')
WHERE u.Role_id = '3'
        AND minSalaryExpectation BETWEEN '1000' AND '10000';
...
Рейтинг: 0 / 0
23.12.2017, 18:11
    #39574847
помогите улучшить запрос
Alexey Furmanov,

В общем случае запросы не эквивалентны по возвращаемому результату....
...
Рейтинг: 0 / 0
23.12.2017, 23:24
    #39574888
Alexey Furmanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите улучшить запрос
Добрый Э - Эх,

во втором случае нужен DISTINCT?
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помогите улучшить запрос / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]