我继承了一个简单地将一个表的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匹配的任何记录。
答案 0 :(得分:0)
这是一种可能的解决方案。你的架构并不完全明显,所以我不得不猜测其中的一些。如果这对您不起作用,请发布您的架构,以及查询的简化版本以及一些示例输入和预期输出。
select distinct
P.*
from
P,
B
where
CHARINDEX(P.payment_details, B.PAYMENT_DETAILS) = 0