将两个表的部分匹配与完全匹配连接起来

时间:2019-03-01 07:14:33

标签: sql ms-access join

我知道令人困惑的标题。我正在尝试加入两个表:

表格:ITEM

+---------------+
|  ItemName     |
+---------------+
| "Banana"      |
| "~A Apple"    |
| "~B Orange"   |
| "Banana ~C"   |
| "Apple ~CC"   |
+---------------+

表:CODELOOKUP

+-------+------------+
| Code  | CodeResult |
+-------+------------+
| "~A"  | "One"      |
| "~B"  | "Two"      |
| "~C"  | "Three"    |
| "~CC" | "Four"     |
+-------+------------+

我希望加入这些表,显示ITEM表中的所有项目,并且如果ItemName包含"~",后跟{{1 }}(但永远不会碰到另一个单词-它总是在多个单词的开头,结尾或中间,左右两边都有空格)我希望它与ItemName值相关。因此,CodeResult中的 PARTIAL MATCH ItemName中的 EXACT MATCH

我设法获得了以下代码:

CodeResult

这几乎返回了我所需要的内容,唯一的问题是它用两次返回行SELECT ITEM.*, CODELOOKUP.CodeResult FROM ITEM LEFT JOIN CODELOOKUP ON INSTR(ITEM.ItemName, CODELOOKUP.Code)

"Apple ~CC"

...仅应返回与+-------------+---------+ | "Banana" | "" | | "~A Apple" | "One" | | "~B Orange" | "Two" | | "Banana ~C" | "Three" | | "Apple ~CC" | "Three" | | "Apple ~CC" | "Four" | +-------------+---------+ 完全匹配的行,如:

"Four"

如何使它起作用?

谢谢

1 个答案:

答案 0 :(得分:2)

您只能在部分匹配项后加入空格,然后在字符串末尾添加空格,以避免~C匹配~CC

SELECT ITEM.*, CODELOOKUP.CodeResult
FROM ITEM LEFT JOIN CODELOOKUP ON INSTR(ITEM.ItemName & " ",CODELOOKUP.Code & " ")