2014-05-15 2 views
0

내 질문에 대한 SQL 미안 해요 ...SQL #temptable에서 결과를 비교하지만 잘못된 결과가 나타납니다.

내 목표는 2 쿼리의 결과를 비교하는 것입니다. 쿼리 # 2 (12700 레코드)의 결과에없는 쿼리 # 1 (13000 레코드)의 레코드가 필요합니다. 이를 위해

는 내가 첫 번째 쿼리 생성 :

SELECT projectnr INTO #temptbl 
FROM prproject P JOIN absences A ON p.projectnr = a.freetextfield_01 
WHERE projectnr LIKE 'CONL%' 

결과가 #temptbl 나에게 13,009 기록했다을

기존 레코드를 필터링해야한다 나의 두번째 쿼리

DELETE FROM #temptbl 
WHERE projectnr in (
    SELECT freetextfield_01 
    FROM absences 
    WHERE TYPE = 7013 
    GROUP BY freetextfield_01) 

검색어의 결과 :

(SELECT freetextfield_01 
FROM absences 
WHERE TYPE = 7013 
GROUP BY freetextfield_01) 

은 12715 개의 레코드를 반환합니다.

그러나 전체 쿼리에서 12715 레코드 대신 13009 레코드가 모두 제거됩니다.

아마도 "유인물이 아닌"진술을 사용하여 유인책을 만들 필요는 없지만 그렇게하는 방법을 모르겠습니다. 이 글을 읽는의 문제에 대한

덕분에 ... 그 그룹의 총격 사건이 사용하는 대신 DISTINCT SELECT ... 불필요한

+2

모든 행에 projectnr이 중복됩니까? 이 경우 모든 행이 삭제 될 수 있습니다. – Tanner

+0

실제로 프로젝트 이름에 중복 레코드가 있습니다. 고유 번호라고 생각했지만 그렇지 않았습니다. 그것도 SELECT DISTINCT입니다. –

답변

1

첫째을 :).

이론적으로 임시 테이블이 필요하지 않습니다. 이 쿼리로이 모든 작업을 수행 할 수 있습니다.

SELECT p.projectnr 
FROM prproject p 
JOIN absences a ON p.projectnr = a.freetextfield_01 
WHERE p.projectnr LIKE 'CONL%' AND p.projectnr NOT IN (
    SELECT freetextfield_01 
    FROM absences 
    WHERE type = 7013 
) 

두 번째 쿼리가 모든 것을 삭제하는 이유는 무엇입니까? 나는 당신이 첫 번째 질의에 중복 된 projectnr을 가지고 있고 유형 7013의 결석이 CONL %와 같은 모든 프로젝트를 포함하고 있다고 가정합니다. 데이터를 보지 않고 이것은 어려운 호출입니다.

또한 ... 2 테이블이 어떻게 관련되어 있는지에 따라 쿼리를 단순화 할 수 있습니다. 프로젝트 행당 부재 행 수는 몇 개입니까? 그것은 일대 다 관계인가? 결석없는 프로젝트가 있습니까? 결과 세트에 이들을 유지 하시겠습니까?

+0

관계에 관해서. 실제로 prproject와 결석 사이에 일대일 관계가 있습니다. 나는 반환 된 데이터의 예를 삽입 할 것이다. –

관련 문제