2012-09-20 2 views
3

PROJECT 테이블에서 4 개 이상의 프로젝트를 수행중인 EMPLOYEES 테이블에서 모든 직원의 이름을 표시하고 싶습니다.하위 쿼리에서 둘 이상의 열을 사용할 수 있습니까?

PROJECTS.PersonID는이 EMPLOYEES.ID을 참조하는 외래 키 :

SELECT NAME, ID 
FROM EMPLOYEES 
WHERE ID IN 
    ( 
    SELECT PersonID, COUNT(*) 
    FROM PROJECTS 
    GROUP BY PersonID 
    HAVING COUNT(*) > 3 
    ) 

내가 그 하위 쿼리에서 모두 PersonID, COUNT(*)이, 또는 하나의 열이 있어야 할 수 있습니까?

답변

5
IN 절에

하지 (또는 당신이 그것을 사용하려고 적어도 방법은. 일부의 RDBMS는 IN 절에 하나 이상의 열이있는 튜플을 허용하지만, 여기에 귀하의 경우 도움이되지 것)

원하는 결과를 얻으려면을 SELECT 목록에서 제거하면됩니다.

SELECT NAME, ID 
FROM EMPLOYEES 
WHERE ID IN 
    ( 
    SELECT PersonID 
    FROM PROJECTS 
    GROUP BY PersonID 
    HAVING COUNT(*) > 3 
    ) 

당신은 또한 당신이 생각 이상의 열이있는 파생 테이블 또는 공통 테이블 표현식에 가입 할 수있는 수를 반환하고 싶어합니다.

+0

의미가 있습니다. 허, 나는 내가 Group By/Select에서 가지고있는 모든 것들을 포함시켜야한다고 생각했다. :) 고마워요! – IanDess

1

질문에 대답하려면 IN 하위 쿼리에 대해 1 개의 열만있을 수 있습니다. 아래 검색어를 사용하여 결과를 얻을 수 있습니다.

SELECT e.ID 
     ,e.Name 
FROM dbo.Projects p 
LEFT OUTER JOIN dbo.Employees e 
    ON p.PersonID = e.ID 
GROUP BY e.ID 
     ,e.Name 
HAVING COUNT(*) > 3 
+0

그래, 고마워, 그게 더 좋은 해결책 일거야! 대학 시험을 위해 SQL을 배우고 있는데, 조인 대신 하위 쿼리를 사용하는 것이 더 좋습니다 :) – IanDess

+0

@DejanStosic :이 답변으로 도움이 되었다면 받아 들일 수있는 것으로 표시하십시오. –

+0

왜 'LEFT'가 아닌 'INNER'가 가입합니까? –