我想编写以下查询,以便从工作表中返回所有工作,其中专业和子专业对等于某个用户的专业和子专业对之一(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 有一个条目(prof3=100 和 subprof3=0),查询应该返回 proession 为 100 的所有订单(对于所有子专业)。