2011-04-26 117 views
2

考虑两个表。技术员表具有T_ID,T_Name等字段。项目表具有P_ID,P_Name,P_Date等字段。SQL查询问题

现在,由于技术人员可以在许多项目上工作,并且项目可以由许多技术人员完成。因此,显而易见,这两张表格之间存在着多对多的关系。打破多对多,并创建一个名为Assignment的新表,其中包含外键T_ID和P_ID。

下面是一个问题:我想找出一个特定技术人员(T_ID = 1的技术人员在上个月(2011年4月)工作过的人员列表,例如,如果技术人员1与Tech 2和3那么他们有资格获得上述查询结果,并且我希望tech 2和Tech 3 T_ID T_name。

答案也可以基于两个查询链接 请让我知道对于上述问题的查询是什么。

+0

我为您添加了作业标签。你应该发布迄今为止已经尝试过的东西,并解释它如何以你认为的方式无法工作。然后,我们可以帮助你找出解决方法,这样你才能在过程中学到一些东西。 – 2011-04-26 23:58:46

回答

1

这将找到所有谁与谁拥有ID = 10也许技术员分配工作的人:

SELECT t.T_ID, t.T_Name 
FROM Technician t, Project p, Assignments a 
WHERE t.T_ID = a.T_ID and p.P_ID = a.P_ID 
and a.P_ID IN (SELECT assign.P_ID FROM Assignments assign, Projects proj WHERE assign.T_ID = 10 and assign.P_ID = proj.P_ID and (proj.P_Date - getdate() <= 30)) 

日期有点猜测,因为我不确定语法,但其余的应该得到你想要的信息。

0

给赋值表一个自己的主键(因为组合键的吸)。 这两个?字符表示您要求与之合作的技术人员的编号为 。例如:“谁与技术员5合作”,?将是 5。

SELECT 
    a1.T_ID 
FROM 
    Assignment a1 
WHERE 
    a1.A_ID IN ( 
     SELECT assignment.A_ID 
     FROM Assignment a2 
     WHERE a2.T_ID = ? 
    ) 
    AND a1.T_ID != ? 
; 
+0

请不要完成家庭作业;问题的措辞本身就是这样确定的。如果你这样做,提问者并没有学到任何东西,我们最终试图修复或维护他们未来不能做的事情。 – 2011-04-27 00:00:16

+0

我喜欢写作业。写它可以帮助我。好有趣。无论如何,我的答案可能需要调整。至少他可以在格式化答案时看到一些逻辑。此外,我将能够获得有关其他人是否认为复合键吸吮的反馈。也许他只是卡住了,不知道从哪里开始。 – Homer6 2011-04-27 00:07:07