2016-08-03 42 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

如果我正确理解您的要求,您正在查找绝对没有付款日记帐的消费者ID列表,其中标签为416,41 7,581,583,1130,2823如果这是正确的,你可能想要的只是一个简单的WHERE NOT EXISTS将无效具有任意这些标签对任何付款期刊任何消费IDS

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 
相关问题