我和一些工人之间有很多关系。
每个工人都有像年龄这样的财产。我希望得到所有与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合作
答案 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)