2015-07-10 73 views
0

我已經繼承了一個查詢,該查詢將一個表的PAYMENT_DETAILS字段簡單地與第二個表的PAYMENT_DETAILS字段進行匹配。它會查看是否在第一PAYMENT_DETAILS字段中的數據是在其他任何地方:使用Charindex查找記錄

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 
        ) 

但這也沒有返回任何預期的結果。什麼是最好的方式去做這件事? 謝謝!

UPDATE:

我使用下面的查詢來識別的結果,但是他們都沒有什麼我期待的是一致的。表A有交易,表B有「Payment_Details」。 「Payment_Details」不應該存在於表C中的「payment_details」列中的任何地方。

我的結果正在返回一些記錄,其中某個特定客戶的表C中的「payment_details」中的某些文本具有payment_details(來自表B) 。我只想記錄表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表和表之間的payment_details比賽C.

回答

0

這裏是一個可能的解決方案。你的模式並不完全明顯,所以我不得不猜測其中的一些。如果這不適用於您,請發佈您的架構,以及查詢的縮減版本以及一些示例輸入和預期輸出。

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

謝謝您的答覆。我在我的問題中添加了一個更新來澄清併發布我當前的查詢。希望這有助於解決問題... – NDubonix