0

我在一些工作和一些工人之间有多对多的关系。
每个工人都有一个像年龄这样的属性。我想获得与 22 岁的工人(例如)合作的所有工作和工人,包括 22 岁的工人。

例如,如果 A 和 B 是两个从事工作 X 的工人,其中一个是 22 岁,我想要一个查询来返回 A 和 B(与 X 及其属性连接)

我有三个表:
Job
1 JobI
2 JobII

Workers:
A Smith 22
B John 21
C Jack 23

JW 关系
1 A
1 B
2 B
2 C

在这个例子中,我想要 A 和 B 的信息以及 Job I,因为 A 是 22 岁,并且在 Job I 中与 B 合作

4

3 回答 3

1

就像是

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 岁的人都会重复,但任何有超过一名 2 岁工人的工作也会重复。

于 2012-05-11T00:26:57.737 回答
0

你的问题有点令人困惑。你想要所有 22 岁的工人的工作还是想要返回 A 和 B?我仍然会尝试回答这两个问题。

假设在您的工作表中您有 job_id,worker_id,job_description.... 并在您的工作表中说您有 worker_id,age,other description

为了获得所有年龄为 22 岁的工作和工人,请运行以下查询。

SELECT jobs.*,workers.* FROM jobs,workers WHERE jobs.worker_id = workers.worker_id AND workers.age=22;

这将返回与 22 岁工人相关的所有工作数据和工人数据。希望这能回答您的问题

于 2012-05-11T00:21:20.763 回答
0

假设您的架构如下所示:

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)
于 2012-05-11T00:29:57.667 回答