将两个表与部分匹配连接到完全匹配

问题描述 投票:1回答:1

令我困惑的头衔我知道。我想加入两个表:

表:ITEM

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

表:代码查找

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

我希望加入这些表格,显示ITEM表格中的所有项目,如果ItemName包含"~",后面是ItemName中任何位置的字母组合(但永远不会碰到另一个单词 - 它将始终在开头,多边的单词的末尾或中间两边都有空格)我希望它与CodeResult值相关。所以在ItemName的一个部分比赛到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"完全匹配的行,如:

+-------------+---------+
| "Banana"    | ""      |
| "~A Apple"  | "One"   |
| "~B Orange" | "Two"   |
| "Banana ~C" | "Three" |
| "Apple ~CC" | "Four"  |
+-------------+---------+

让这个工作的方法是什么?

谢谢

sql ms-access join
1个回答
2
投票

您只能在跟随它们的空格的部分匹配时加入,并在字符串的末尾添加一个空格,以避免~C匹配~CC

SELECT ITEM.*, CODELOOKUP.CodeResult
FROM ITEM LEFT JOIN CODELOOKUP ON INSTR(ITEM.ItemName & " ",CODELOOKUP.Code & " ") 
© www.soinside.com 2019 - 2024. All rights reserved.