Как проверить наличие значений из списка в другой таблице?
У меня есть две таблицы:
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.