Запутанный заголовок я знаю.Я пытаюсь объединить две таблицы:
Таблица: ПУНКТ
+---------------+
| ItemName |
+---------------+
| "Banana" |
| "~A Apple" |
| "~B Orange" |
| "Banana ~C" |
| "Apple ~CC" |
+---------------+
Таблица: CODELOOKUP
+-------+------------+
| 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" |
+-------------+---------+
Как это работает?
Спасибо