2017-03-02 4 views
2

大部分のクエリで動作するクエリにLEFT JOINがあります。私はそれが作業していないと理由を把握することはできませんレコードを見つけた。私がやっているSQL Server Left Join LIKEの予期しない結果

SELECT t1.StrSerialNumber, t2.serialNumber 

FROM table1 AS T1 

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

を... t1.StrSerialNumberは、どちらかの端に余分な文字を持つことができます。それ以外の場合は、これら2つの列が一致する必要があります

これは、1行を除いて、期待どおりに動作しています。

私が実行します。

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

...別のクエリとして、それは私が探しています何を返すん!私は、値LIKEのために直接t2を照会するとき、それがあることを見ることができます。 JOINの一部としては機能しません。

t1のすべての列はnullではありません。ですので、他の欠落している情報はありません。

私も、t2.serialNumberは、t1.StrSerialNumberと一致するが、フィールドにスペースがないことを確認していないUPDATEDなど

どれでも「落とし穴の」このシナリオのために?

ありがとうございました!ここで

EDIT

は、それが失敗した場所の一例です。

下部の緑色のボックスは、クエリ自体の緑色のボックス内にあるJOINステートメントの予想結果を示しています。

クエリ結果の赤いボックスは、「好きな」一致が予想される行を示します。

作業領域のオレンジ色のボックスは、行42のgoogleSN列にあると思われるserialNumberを返すクエリです。

黄色の線は、serialNumberがJOIN内で実行されるべき場所を示しています。

明らかに、私はinvSNのすべての '0'の値に対して「似ている」とは思いません。

これは意味があると思います!

enter image description here

+0

T1は、あなたの 'LIKE'がt1.StrSerialNumber''上にある必要があり、余分な数字を持っている場合「t2」ではない。おそらく、 'LEFT JOIN テーブル2 AS t2 ON t2.serialNumber LIKE '%' + t1.StrSerialNumber + '%''。それ以外の場合は、少なくともサンプルデータセットとクエリの予想結果が必要です。乾杯。 – scsimon

+0

ありがとうございました! – m0lochwalker

+0

それは問題でしたか? – scsimon

答えて

1

2番目のクエリは、(ワードサブセットを乱用)第一の部分集合を返しません。 LEFT JOINクエリは、t1.SNがt2.SN値に含まれることを望んでいます。 2番目のクエリは、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を何か 'LIKE' + t2.serialNumber + 'anything after'の前のものに一致させたいということです。意味するのは、t2.serialNumber +両端の文字が見つかると、それは一致します。私はあなたが言っていることを見ていますが、ほとんどの結果が正しいと思われるのは混乱しています。 – m0lochwalker

+0

失敗した例を教えてもらえますか? –

+0

もちろん!私に瞬間を与えてください... – m0lochwalker

関連する問題