У меня есть несколько таблиц, в которые мне нужно присоединиться, я не могу изменить базу данных, поскольку она используется в нескольких разных приложениях.
Первая таблица выглядит следующим образом:
id, list_of_foreign_id
1, "1, 3, 4, 8, 12, 13, 14, 15, 16, 23"
2, "1, 3, 4, 8, 23"
3, "1, 3, 8, 12, 13, 14, 15, 23"
4, "7"
....
И таблица forrening просто соединена с ID и может выглядеть следующим образом:
ID, name
1, "john Oliver"
2, "John Doe"
3, "Arthur Dent"
....
И мне нужно сопоставить список идентификаторов в таблице с идентификатором на второй таблице.
Запрос будет выглядеть следующим образом, но я не уверен в условии соединения
Select ...
from
A
join
B on a.list_of_foreign_id contains B.id
Я думаю, что это можно сделать с помощью регулярного выражения.
Я пробовал с locate, но он также соответствует подстрокам, как 1, 3, будет соответствовать 13. и т.д.
Я также огляделся и нашел этот пост, Repex для разделенных запятыми. Но я не уверен, как смотреть с регулярным выражением для конкретных случаев.
Вы можете использовать find_in_set()
.
SELECT *
FROM A
INNER JOIN B
ON find_in_set(B.id, A.list_of_foreign_id);
a.list_of_foreign_id contains B.id
», как вы и просили.