MySQL объединение по указанной c подстроке из кулона типа text - PullRequest
0 голосов
/ 17 января 2020
SHOPS
+----+---------------+
| id |   shop_tag    |
+----+---------------+
| 1  | 1234560000000 |
+----+---------------+

LOGS
+----+-------------------------------------+
| id |             request                 |
+----+-------------------------------------+
| 1  |  {"key":"123","tag":"123456*****"}  |
+----+-------------------------------------+

Столбец shop_tag имеет тип int и запрос столбца для журналов типа text и содержит строку jSON.

Теперь я хочу объединить эти 2 таблицы после извлечения 123456 из обоих столбцов.

Я пытаюсь это сделать, но безрезультатно

SELECT logs.id FROM logs INNER JOIN shops ON left(shops.shop_tag,6) = left(right(logs.request,6),26)

Обратите внимание, что длина и структура столбца shop_tag и request фиксированы .

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Вы можете использовать встроенную функцию JSON_EXTRACT

SELECT JSON_EXTRACT('{"key":"123","tag":"123456*****"}', '$.key') `key`

Вывод:


|key    |
+-------+
|"123"  |

0 голосов
/ 17 января 2020

Если вы используете MySQL 5.7.13+, вы можете использовать функцию JSON ->>, чтобы извлечь значение tag из столбца request и непосредственно сравнить осталось 6 символов:

SELECT *
FROM SHOPS s
JOIN LOGS l ON BINARY LEFT(l.request->>'$.tag', 6) = BINARY LEFT(s.shop_tag, 6)

Примечание. В зависимости от параметров сортировки ваших таблиц вам может не понадобиться BINARY в условии.

Демонстрация на dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...