使用Charindex查找记录

时间:2015-07-10 14:44:48

标签: sql sql-server charindex

我继承了一个简单地将一个表的PAYMENT_DETAILS字段与第二个表的PAYMENT_DETAILS字段匹配的查询。它查看第一个PAYMENT_DETAILS字段中的数据是否在另一个中的任何位置:

left outer join payroll_class P on        
 charindex(P.payment_details,B.PAYMENT_DETAILS) > 0 

我只是想确定正确的方法来做到这一点。我只想要第一张表中PAYMENT_DETAILS与第二张表的PAYMENT_DETAILS不匹配的记录。

我尝试使用:

left outer join dimpayroll_classification P on        
charindex(P.payment_details,B.PAYMENT_DETAILS) = 0 

但是这并没有返回预期的结果 - 我不确定这在逻辑上是否有意义。然后我用了一个子查询:

WHERE customer NOT in (
                      select customer from table b
                      left outer join dimpayroll_classification P on        
                      charindex(P.payment_details,B.PAYMENT_DETAILS)>0
                      )

但是这也没有按预期返回任何结果。最好的方法是什么? 谢谢!

更新

我使用以下查询来识别结果,但它们与我要查找的内容不一致。表A有交易,表B有" Payment_Details"。 " Payment_Details"不应该存在于列中的任何位置" payment_details"在表C中。

我的结果是返回一些记录,其中特定客户有一个payment_details(来自表B),其中包含" payment_details"在表C中,我只想要记录表B中每个记录的payment_details在整个表C中都没有,所以看起来逻辑上的记录比它应该多。

我目前正在使用以下查询:

SELECT DISTINCT(a.CUSTOMER), a.REF_NO, a.TRAN_TYPE,
        a.ACCT_NO, a.AMOUNT, a.AUTH_DATE,
        b.ORDERING_CUST, b.PAYMENT_DETAILS
FROM TRANSFER_HIS A
INNER JOIN TRANSFER_EXTEND_HIS B
ON A.REF_NO = B.REF_NO
INNER JOIN payroll_class c
ON charindex(c.payment_details, b.PAYMENT_DETAILS) = 0
WHERE A.CUSTOMER IS NOT NULL
and A.AUTH_DATE > '2015-05-01'
and A.TRAN_TYPE = 'ACH'

如何增强查询以不提取表B和表C中payment_details匹配的任何记录。

1 个答案:

答案 0 :(得分:0)

这是一种可能的解决方案。你的架构并不完全明显,所以我不得不猜测其中的一些。如果这对您不起作用,请发布您的架构,以及查询的简化版本以及一些示例输入和预期输出。

select distinct
    P.*
from
    P,
    B
where
    CHARINDEX(P.payment_details, B.PAYMENT_DETAILS) = 0