2013-08-27 3 views
0

일치하는 값이없는 테이블의 모든 행을 반환하는 SQL 쿼리를 작성하려고했습니다.일치하지 않는 SQL 내부 조인

나는 회사, 직장, 부업, 비용 코드 및 비용 유형 (다른 필드들도 있음)을 가지고 있습니다. 'J'비용 유형은 있지만 'L'비용 유형은없는 모든 행을 반환해야합니다. 나는 그것이 내가 부족 간단하게 뭔가 알고

Company Job  Subjob Costcode Costtype 
------- -------- ------- --------- ---------- 
    1  1234    0132  J 
    1  2345  03  1112  J 
    1  3384    3928  J 
    1  3384  03  3928  J 

만의 오른쪽 조합을 얻을 수 없습니다

Company Job  Subjob Costcode Costtype 
------- -------- ------- --------- ---------- 
    1  1234    0132  J 
    1  2345  01  9394  E 
    1  2345  02  9233  L 
    1  2345  02  9992  J 
    1  2345  02  9992  L 
    1  2345  03  1112  J 
    1  3384    3928  J 
    1  3384  03  3928  J 
    1  3384  11  2838  L 

그래서 나는 다음을 기대 :

아마 더 나은 데이터 설명 JOIN, ON 및 WHERE 절을 사용하면 작동합니다.

+0

더 소리. –

답변

2

JOIN의 사용 필요가 없습니다 : 표 회사 = A.Company 및 작업 = A.Job 및 Costtype = 'J'FROM

SELECT * 
FROM YourTable A 
WHERE EXISTS(SELECT 1 FROM YourTable 
      WHERE Company = A.Company 
      AND Job = A.Job 
      AND Costtype = 'J') 
AND NOT EXISTS(SELECT 1 FROM YourTable 
       WHERE Company = A.Company 
       AND Job = A.Job 
       AND Costtype = 'L') 
0

SELECT 기업, 직업, subjob, costcode 을 마이너스 SELECT 기업, 직업, subjob 표 FROM costcode, WHERE 회사 = A.Company 및 작업 = A.Job 및 Costtype = 'L'

,

결과 집합에 비용 유형을 표시하지 않으려면이 내용이 만족되기를 바랍니다. 당신이 (`이 시나리오에서 EXISTS`하지, 또는, 더 구체적으로) 조인 대`EXISTS`를 사용하려면 같은

0
SELECT * FROM COMPO T1 
WHERE Costtype='J' 
AND NOT EXISTS 
(SELECT * FROM COMPO T2 WHERE T1.Costcode=T2.Costcode AND Costtype ='L') 

Company    Job  Subjob   Costcode   Costtype 
1     1,234  ?    0,132   J 
1     2,345  3    1,112   J 
1     3,384  ?    3,928   J 
1     3,384  3    3,928   J