我的查询中有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中的值。
我希望这是有道理的!
答案 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 + '%'