我在一些工作和一些工人之间有一种多对多的关系。
每个工人都有像年龄这样的属性。我希望获得所有与22岁的工人协作的工作和工人(例如),包括22岁的工人。
例如,如果A和B是两个执行任务X的工人,其中一个是22岁,我希望查询同时返回A和B(与X及其属性连接)
我有三张表:
工作
1个JobI
2个JobII
员工:
A Smith 22
B约翰21
C插孔23
J-W关系
1个A
1 B
2亿
2 C
在本例中,我需要A和B的信息以及工作I,因为A 22岁,并且在工作I中与B协作
发布于 2012-05-11 08:26:58
就像这样
Select * From Workers
join (Select Distinct WorkerID From WorkerJobs Join Workers on Worker.WorkerID = WorkerJobs.WorkerID and Worker.Age = 22) worker22 on worker22.workerid = worker.workerid
join Jobs on jobs.jobid = workerjobs.jobid
join WorkerJobs on Workerjobs.workerid = workers.workerid
and WorkerJobs.JobId = Jobs.JobID即与一个22岁的工人得到所有的工作,然后加入回到工作和工人,以获得细节。
任何22岁的人都会重复做一份以上的工作,而任何一份工作都会有两岁以上的员工。
发布于 2012-05-11 08:21:21
你的问题有点令人费解。你是想让22岁的工人得到所有的工作,还是想要A和B?不过,我还是会尝试回答这两个问题。
假设在您的工作列表中有job_id、worker_id、job_description……假设您的worker表中有worker_id、年龄和其他描述
为了获取所有22岁的作业和工人,运行以下查询。
SELECT jobs.*,workers.* FROM jobs,workers WHERE jobs.worker_id = workers.worker_id AND workers.age=22;这将返回与年龄为22岁的员工相关联的所有职务数据和员工数据。我希望这能回答你的问题
发布于 2012-05-11 08:29:58
假设您的模式如下所示:
Table workers {
id,
age,
...
}
Table jobs {
id,
worker_id,
...
}要回答您的问题,您需要一个带子查询的查询。
内部查询
select jobs.id
from jobs
left join workers on workers.id = jobs.worker_id
where age = 22返回所有作业,这些作业的工人年龄为22岁。
外部查询
select *
from jobs, workers
where jobs.worker_id = workers.id
and jobs.id in (INNER QUERY)选择在内部查询中拥有作业的所有作业和工作器。
最终结果:
select *
from jobs, workers
where jobs.worker_id = workers.id
and jobs.id in (select jobs.id
from jobs
left join workers on workers.id = jobs.worker_id
where age = 22)https://stackoverflow.com/questions/10543772
复制相似问题