令我困惑的头衔我知道。我想加入两个表:
表: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" |
+-------------+---------+
让这个工作的方法是什么?
谢谢
您只能在跟随它们的空格的部分匹配时加入,并在字符串的末尾添加一个空格,以避免~C
匹配~CC
:
SELECT ITEM.*, CODELOOKUP.CodeResult
FROM ITEM LEFT JOIN CODELOOKUP ON INSTR(ITEM.ItemName & " ",CODELOOKUP.Code & " ")