2011-04-26 4 views
2

두 테이블을 고려하십시오. 기술자 테이블에는 T_ID, T_Name과 같은 필드가 있습니다. 프로젝트 테이블에는 P_ID, P_Name, P_Date와 같은 필드가 있습니다.SQL 쿼리 문제

기술자는 많은 프로젝트에서 작업 할 수 있으므로 많은 기술자가 프로젝트를 수행 할 수 있습니다. 따라서 분명히 알 수 있듯이 두 테이블 간에는 많은 관계가 있습니다. many to many를 분해하고, 외래 키 T_ID와 P_ID로 구성된 Assignment라는 새로운 테이블을 생성하십시오.

다음은 질문입니다. 특정 기술자 (T_ID = 1 인 기술자)가 지난 달 (4 월/2011)에 작업 한 사람의 목록을 찾고 싶습니다. 예를 들어 기술자 1이 Tech 2 및 3 그때 그들은 위의 쿼리 결과에 대한 자격이 있고 테크 2와 테크 3 T_ID T_name을 원합니다.

답변은 연결된 두 개의 쿼리를 기반으로 할 수도 있습니다. 언급 한 문제에 대한 쿼리가 무엇인지 알려주시기 바랍니다.

+0

숙제 태그를 추가했습니다. 지금까지 해보신 내용을 게시하고 생각했던대로 작동하지 않는 방법을 설명해야합니다. 그러면 문제를 해결하는 방법을 도울 수 있으므로 실제로 과정에서 뭔가를 배우게됩니다. –

답변

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

할당 테이블에 고유 한 기본 키를 지정하십시오 (복합 키가 꽉 찼기 때문에). 둘 은요? 문자는 과 (과) 협의 한 기술자의 ID를 나타냅니다. 예를 들어, "누가 기술자 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

숙제를 완료하지 마십시오. 질문 그 자체의 표현은 그것을 그 자체로 식별합니다. 당신이 그렇게한다면, 묻는 사람은 아무것도 배우지 못하며, 우리는 미래에 할 수없는 일을 고치거나 유지하려고 노력하게됩니다. –

+0

나는 숙제를 좋아한다. 그리고 그것을 쓰면 도움이됩니다. 재미 있습니다. 내 대답은 아마 어쨌든 조정해야합니다. 적어도 그는 답을 형식화하는 논리를 볼 수 있습니다. 또한 다른 사람들이 복합 키를 빨아들이는 지 여부에 대한 의견을 얻을 수 있습니다. 어쩌면 그는 막 붙어서 어디에서 시작해야할지 모른다. – Homer6