соответствие разделенных запятыми значений в MySQL при объединении

0

У меня есть несколько таблиц, в которые мне нужно присоединиться, я не могу изменить базу данных, поскольку она используется в нескольких разных приложениях.

Первая таблица выглядит следующим образом:

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 для разделенных запятыми. Но я не уверен, как смотреть с регулярным выражением для конкретных случаев.

  • 0
    Коммалисты - это обычно «плохой дизайн схемы».
Теги:

1 ответ

1

Вы можете использовать find_in_set().

SELECT *
       FROM A
            INNER JOIN B
                       ON find_in_set(B.id, A.list_of_foreign_id);
  • 0
    На практике это не работает, так как возвращает только первое совпадение.
  • 0
    А также? Одного совпадения достаточно, чтобы решить, что « a.list_of_foreign_id contains B.id », как вы и просили.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню