Как проверить наличие значений из списка в другой таблице?

У меня есть две таблицы:

Table A

+---------+-----------------------+
|  id     |     val(string)       |
+---------+-----------------------+
| 1       | ["avc", "rdd", "asd"] |
| 2       | ["ijn", "qew"]        |
| 3       | ["asd"]               |
| 4       | null                  |
+---------+-----------------------+

Table B

+---------+-----------+
|  id     |val(string)|
+---------+-----------+
| 1       | rdd       | 
| 2       | qew       |
| 3       | ijn       |
+---------+-----------+

В таблице А данные хранятся именно в таком ["avc", "rdd", "asd"] виде и переделать это возможности нет.

Нужно получить ID из таблицы А у которых одно из значений списка в поле val таблицы А есть в значении поля val таблицы B

То-есть на выходе я должен получить id 1 и 2 из таблицы А


Ответы (1 шт):

Автор решения: Akina

Проще всего так:

WHERE JSON_SEARCH(tableA.val, 'one', tableB.val) IS NOT NULL

Для других функций (JSON_CONTAINS, JSON_OVERLAPS) с аналогичной целью - нужно tableB.val обрамить двойными кавычками с помощью CONCAT(). То же - если использовать строковые функции INSTR/LOCATE.

→ Ссылка