2017-03-02 36 views
2

我的查詢中有一個左連接,適用於大多數查詢。我遇到了一個它沒有處理的記錄,但無法找出原因。SQL Server左連接LIKE意外的結果

我做:

SELECT t1.StrSerialNumber, t2.serialNumber 

FROM table1 AS T1 

LEFT JOIN 
table2 AS t2 ON t1.StrSerialNumber LIKE '%' + t2.serialNumber + '%' 

... t1.StrSerialNumber會對兩端的多餘的字符。否則,這兩列應該匹配。

這是工作正常(或希望),除了1行,這讓我覺得可能會有更多。

當我運行:

select * from t2 where serialNumber like '%' + 'number from t1.StrSerialNumber' + '%' 

...作爲一個單獨的查詢,它不會返回我所期待的!我可以看到,當直接查詢t2值爲LIKE時,它就在那裏。它只是不作爲JOIN的一部分。

t1中的所有列都是非空,所以它不會像有其他一些缺失的信息。

我甚至已更新t2.serialNumber,不匹配t1.StrSerialNumber,但要確保沒有在現場空間等

任何「疑難雜症的」對於這種情況?

謝謝!

EDIT

下面是其中它失敗的例子。

底部的綠框顯示JOIN語句的預期結果,在查詢本身的綠色框內。

查詢結果中的紅色框顯示我期望「喜歡」匹配的行。

工作區中的橙色框是查詢,它返回我期望在第42行的googleSN列中的serialNumber。

黃線只顯示我認爲serialNumber應該在JOIN中進入的位置。

很顯然,我不希望invSN中的所有'0'值都匹配'like'。

我希望這是有道理的!

enter image description here

+0

如果T1有多餘的數字那麼你的'LIKE'需要放在't1.StrSerialNumber'而不是't2'。或許,'LEFT JOIN table2 AS t2 ON t2.serialNumber LIKE'%'+ t1.StrSerialNumber +'%''。否則,我們至少需要一個樣本數據集和您的查詢的預期結果。乾杯。 – scsimon

+0

謝謝你的迴應! – m0lochwalker

+0

是這個問題嗎? – scsimon

回答

1

第二查詢不返回所述第一子集(濫用字子集)。 LEFT JOIN查詢需要將t1.SN包含在t2.SN值中。第二個查詢需要將t2.SN包含在t1.SN值中。所以我想你可能對你的要求有問題。

如果你所描述的現象是你唯一的問題,一個簡單的OR將解決這個問題:

SELECT t1.StrSerialNumber, t2.serialNumber 

FROM table1 AS T1 

LEFT JOIN 
table2 AS t2 ON t1.StrSerialNumber LIKE '%' + t2.serialNumber + '%' 
    OR t2.serialNumber LIKE '%' + t1.StrSerialNumber + '%' 
+0

謝謝。我理解LEFT JOIN的方式是,它希望將t1.StrSerialNumber匹配到'+ t2.serialNumber +'之後的任何東西'之後的任何東西。意思是如果它發現t2.serialNumber +兩端都有一個字符,它就會匹配。我確實看到你在說什麼,但令人困惑的是,它看起來正確的大部分結果。 – m0lochwalker

+0

你能告訴我們一個失敗的例子嗎? –

+0

當然!給我一點時間...... – m0lochwalker