0

我继承了一个查询,该查询仅将一个表的 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”不应存在于表 C 中“payment_details”列的任何位置。

我的结果是返回一些记录,其中特定客户的 payment_details(来自表 B)在表 C 中的“payment_details”中有特定文本。我只想要表 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 匹配的任何记录。

4

1 回答 1

0

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

select distinct
    P.*
from
    P,
    B
where
    CHARINDEX(P.payment_details, B.PAYMENT_DETAILS) = 0
于 2015-07-10T14:59:30.857 回答