2017-09-28 15 views
1

우리는 CIVILID를 복제했다 TOTEMP 테이블의 일부 직원이 지금은 하위 쿼리를 사용하여 count 문에서 나열하는 방법?

내가 EMP에서 다음 쿼리를

SELECT P.FIRSTNAME,ID 
FROM EMP p 
where exists (SELECT CIVILID, COUNT (CIVILID) 
       FROM TOTEMP AS D 
       group by CIVILID 
       HAVING (COUNT (CIVILID) >1)) 

선택 모든 레코드를 시도 EMP 테이블에서 일치하는 이름을 찾으려면 테이블

2

는) 나는 IN 문을 시도

SELECT P.FIRSTNAME,p.ID 
FROM EMP p ,UDFEMP k 
where p.ID in (SELECT CIVILID ,COUNT (CIVILID) 
       FROM TOTEMP AS D 
       group by CIVILID 
       HAVING (COUNT (CIVILID) >1)) 

하위 쿼리가 EXISTS와 함께 도입되지 않은 경우 선택 목록에서 하나의 식만 지정할 수 있습니다.

감사

enter image description here

+0

EXISTS 쿼리에는 상관 된 하위 쿼리가 필요합니다. IN 쿼리에는 CIVILID 컬럼이 하나만있는 하위 선택이 필요합니다. – jarlh

+0

샘플 데이터를 제공하거나 정의 된 스키마로 sqlfiddle을 만들 수 있습니까? 그러면 도움이 될 것이고 문제를 쉽게 해결할 수있을 것입니다. –

+0

@ 하샬, 질문을 업데이트했습니다. – aryan

답변

1
SELECT p.FIRSTNAME,p.ID,d.CIVILID 
    FROM EMP p inner join TOTEMP d 
    on p.id = d.id 
    where d.CIVILID in (select CIVILID from TOTEMP 
         group by CIVILID having count(ID)>1); 

는 희망이 도움이!

+0

문은 하나의 단일 레코드 만 여러 번 나열합니다. – aryan

+0

쿼리가 편집되었습니다. 확인 해봐. –

+0

이번에는 emp 테이블의 첫 번째 레코드를 반환합니다 – aryan

0

이 작업은 existsin 연산자를 사용하여 수행 할 수 있지만 쿼리에는 모두 문제가 있습니다.

exists 변형 pd 사이의 관계를 누락되었습니다

SELECT p.firstname, p.id 
FROM emp p 
WHERE EXISTS (SELECT * 
       FROM  totemp d 
       WHERE p.id = d.civilid -- Here! 
       GROUP BY civilid 
       HAVING COUNT(civilid) > 1) 

in 변형 단지 내부 쿼리에서 id 아니라 여러 열을 (선택해야하고 함께 참여 교차 할 필요가 없습니다 udfemp) :

SELECT p.firstname, p.id 
FROM emp p 
where p.id in (SELECT civilid 
       FROM  totemp 
       GROUP BY civilid 
       HAVING COUNT(civilid) > 1) 
+0

존재가 오류를 반환했습니다. nvarchar 값 '260110101612'의 변환이 int 열을 오버플로했습니다. – aryan

+0

in 문은 emp 테이블에서 하나의 레코드 만 반환합니다. – aryan

+0

은'p.id'와'd.civilid' 다른 데이터 유형입니까? – Mureinik