获取同事的Mysql选择查询

时间:2012-05-11 00:10:16

标签: mysql select join

我和一些工人之间有很多关系。
每个工人都有像年龄这样的财产。我希望得到所有与22岁工人(例如)22岁的工人合作的工作和工人。

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

我有三张桌子:
工作
1 JobI
2 JobII

工人:
史密斯22
约翰逊21 C Jack 23

J-W关系
1 A
1 B
2 B
2 C

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

3 个答案:

答案 0 :(得分: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岁的工人。

答案 1 :(得分:0)

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

让我们在你的工作表中说你有job_id,worker_id,job_description ....并且在你的工作台中你可以说你有worker_id,年龄,其他描述

为了让所有22岁以上的工作和工人继续追查。

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

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

答案 2 :(得分: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)