SQL Server左连接LIKE意外结果

时间:2017-03-02 20:30:58

标签: sql-server left-join sql-like

我的查询中有LEFT JOIN,适用于大多数查询。我遇到了一条记录,它没有处理,也无法找出原因。

我在做:

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,但要确保字段中没有空格等。

任何'陷阱'对于这种情况??

谢谢!

修改

以下是失败的示例。

底部的绿框显示JOIN语句的预期结果,位于查询本身的绿色框内。

查询结果中的红色框显示了我希望'喜欢'的行。匹配。

工作区中的橙色框是返回我期望在第42行googleSN列中的serialNumber的查询。

黄线只显示我认为serialNumber应该在JOIN中的位置。

显然,我不希望像“'匹配所有' 0' invSN中的值。

我希望这是有道理的!

enter image description here

1 个答案:

答案 0 :(得分: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 + '%'