Соединить две таблицы с частичным совпадением с точным соответствием - PullRequest
0 голосов
/ 01 марта 2019

Запутанный заголовок я знаю.Я пытаюсь объединить две таблицы:

Таблица: ПУНКТ

+---------------+
|  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"  |
+-------------+---------+

Как это работает?

Спасибо

1 Ответ

0 голосов
/ 01 марта 2019

Вы можете присоединиться только к частичным совпадениям с пробелом после них и добавить пробел в конце строки, чтобы избежать ~C сопоставления ~CC:

SELECT ITEM.*, CODELOOKUP.CodeResult
FROM ITEM LEFT JOIN CODELOOKUP ON INSTR(ITEM.ItemName & " ",CODELOOKUP.Code & " ") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...