2016-08-03 4 views
0

В таблице cnsmr_pymnt_tag есть несколько тегов платежей, связанных с каждым потребителем в таблице cnsmr.Исключая все записи со связанными значениями

Если какой-либо из платежей потребителя имеет один из указанных ниже идентификаторов тегов (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 7, 581, 583, 1130, 2823. Если это правильно, то, что вы, вероятно, хотите, просто просто НЕ СУЩЕСТВУЕТ, что приведет к аннулированию любых идентификаторов клиентов, которые имеют какие-либо из этих тегов в любых журналах платежей.

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