2016-08-03 3 views
0

cnsmr 테이블의 모든 소비자와 연결된 테이블에는 cnsmr_pymnt_tag 테이블에 여러 개의 지불 태그가 있습니다.연관된 값이있는 모든 레코드 제외

소비자 지불 중 아래에 나열된 태그 ID (416,417,2823 등) 중 하나가있는 경우 결과에 cnsmr_idntfr_id을 넣지 마십시오.

아래의 코드는 소비자 지불에 tag_ID 중 하나가 없지만 내 목록에서 벗어난 Tag_ID 코드가 혼합되어 있으면 잘못된 결과를 얻고 소비자 번호가 안으로 끝납니다. 내 결과.

정확하게 말하고있는 것이지만 그것이 어떻게 변경되어 소비자 번호가 어떤 tag_ID 값과도 관련되어 있으면 결과에 나타나지 않는지 이해합니다.

SELECT DISTINCT 
cnsmr.cnsmr_idntfr_agncy_id 
FROM   
cnsmr_pymnt_jrnl 
INNER JOIN 
cnsmr_pymnt_tag ON cnsmr_pymnt_jrnl.cnsmr_pymnt_jrnl_id = cnsmr_pymnt_tag.cnsmr_pymnt_jrnl_id 
INNER JOIN 
tag ON cnsmr_pymnt_tag.tag_id = tag.tag_id 
INNER JOIN 
cnsmr ON cnsmr_pymnt_jrnl.cnsmr_id = cnsmr.cnsmr_id 
WHERE 
cnsmr_pymnt_tag.TAG_ID NOT IN 
(  416 -- VOLUNTARY 
     ,417 -- VOLUNTARY 
     ,2823 -- VOLUNTARY SPEED PAY 
     ,583 -- SPEED PAY 
     ,1130 -- VOLUNTARY TVOLCC 
     ,581 -- VOLUNTARY LBXVOL TAG 
) 

답변

0

귀하의 요구 사항을 올바르게 이해 한 경우 416, 41의 태그가있는 지불 저널이 전혀없는 소비자 ID 목록을 찾고 있습니다 7, 581, 583, 1130, 2823에 해당하는 태그가있는 소비자 ID가 무효화됩니다.

SELECT DISTINCT 
C.cnsmr_idntfr_agncy_id 
FROM cnsmr AS M 
WHERE NOT EXISTS 
(
    SELECT 1 
    FROM tag AS T 
     JOIN cnsmr_pymnt_tag AS CPT 
      ON T.tag_id = CPT.tag_id 
     JOIN cnsmr_pymnt_jrnl AS CPJ 
      ON CPT.cnsmr_pymnt_jrnl_id = CPJ.cnsmr_pymnt_jrnl_id 
     JOIN cnsmr AS C 
      ON CPJ.cnsmr_id = C.cnsmr_id 
    WHERE T.tag_id IN (416,417,581,583,1130,2823) 
     AND C.cnsmr_id = M.cnsmr_id 
) 
0

WHERE 
cnsmr_pymnt_tag.TAG_ID NOT IN 
(  416 -- VOLUNTARY 
) 
and 
cnsmr_pymnt_tag.TAG_ID NOT IN (471) 

처럼 코드를 수정 시도 ...... 그래서

에 또는, 당신은 또한 다음과 같은 것을 시도 할 수 있습니다 ..

;with cte(tag) 
as 
(  416 -- VOLUNTARY 
     ,417 -- VOLUNTARY 
     ,2823 -- VOLUNTARY SPEED PAY 
     ,583 -- SPEED PAY 
     ,1130 -- VOLUNTARY TVOLCC 
     ,581 -- VOLUNTARY LBXVOL TAG 
) 
(your whole query as in question) wq 
join 
cte c 
on c.tag<>wq.tag 
관련 문제