Я хочу написать следующий запрос, чтобы вернуть все вакансии из таблицы вакансий, где пара профессия и подпрофессия равна одной из пар профессия и подпрофессия для определенного пользователя (одна из 4 пар). если у пользователя есть пара, где подпрофессия = 0, это означает взять все подпрофессии для соответствующей профессии:
что-то вроде этого:
select * from jobs j
where
(j.profession, j.subprofession) in
(select (u.profession1, u.subprofession1) from users u where userid=@userid),
select (u.profession2, u.subprofession2) from users u where userid=@userid),
select (u.profession3, u.subprofession3) from users u where userid=@userid),
select (u.profession4, u.subprofession4) from users u where userid=@userid)
and
j.profession in (select u.profession1, u.profession2, u.profession3, u.profession4 from users u where userid=@userid) and (u.subprofession1 = 0 or u.subprofession2 = 0 or u.subprofession3 = 0 or u.subprofession4 = 0))
Я знаю, что этот запрос синтаксически неверен и не делает того, что должен, так как же можно достичь вышеуказанной цели, используя предложение IN или WHERE EXISTS?
jobs: profession, subprofession
1 (100, 200)
2 (100, 300)
3 (100, 400)
4 (100, 500)
5 (200, 300)
6 (400, 500)
7 (400, 100)
8 (400, 600)
9 (200, 200)
10 (600, 700)
11 (100, 100)
12 (500, 300)
13 (200, 200)
users: (prof1, subprof1, prof2, subprof2, prof3, subprof3, prof4, subprof4)
1 (100, 100, 757, 646, 100, 0, 500, 400)
2 (100, 2, 565, 76, 567, 534, 433, 565)
3 (200, 454, 553, 345, 354, 435, 334, 877)
4 (500, 300, 456, 565, 354, 435, 545, 435)
5 (400, 453, 434, 453, 423, 234, 324, 4435)
6 (100, 400, 435, 543, 465, 654, 454, 543)
7 (435, 435, 600, 700, 100, 0, 500, 400)
8 (100, 100, 553, 345, 100, 0, 500, 400)
запрошенный запрос будет возвращаться из строк таблицы заданий: 1,2,3,4,11
это строки, в которых значения профессии и подпрофессии (в виде пары) появляются в одной из пар пользователей prof и subprof. также, поскольку для пользователя 1 есть запись (проф3=100 и подпроф3=0), запрос должен вернуть все заказы, в которых профессия равна 100 (для всех подпрофессий).
if the user has a pair where the subprofession=0, that means take all the subprofessions for the respective profession
- person Tim   schedule 30.05.2013