Я думаю, что вашим первым шагом будет получение столов с питанием и командами в удобном для вас формате.Использование этих странных конкатенационных столбцов никогда не будет легким или быстрым.
Делать что-то простое, например this , чтобы разделить идентификаторы на разные строки:
select trim(column_value) partner_id,
team
from teams,
xmltable(('"' || replace(teams.concat_identifier_partner, ']',']","') || '"'))
Дает вывод, подобный следующему:
+------------+------+
| PARTNER_ID | TEAM |
+------------+------+
| [012345] | Blue |
| [012346] | Blue |
| [012347] | Red |
+------------+------+
Затем вы можете использовать их как встроенные представления в вашем запросе или создать новую временную таблицу для каждого из них.Временная таблица позволит вам проиндексировать их в новом столбце идентификатора.
После того как ваши данные будут в более простом формате, объединения станут проще.
select people.identifier,
people.name,
formatted_teams.team,
formatted_meals.meal
from people
join (select trim(column_value) partner_id,
team
from teams,
xmltable(('"' || replace(teams.concat_identifier_partner, ']',']","') || '"')) ) formatted_teams
on people.identifier = formatted_teams.partner_id
left join (select trim(column_value) plate_id,
meal
from meals,
xmltable(('"' || replace(meals.concat_identifier_plate, ']',']","') || '"')) ) formatted_meals
on people.identifier = formatted_meals.plate_id
order by people.identifier
Вывод:
+------------+--------+------+--------+
| IDENTIFIER | NAME | TEAM | MEAL |
+------------+--------+------+--------+
| [012345] | George | Blue | Salmon |
| [012346] | Jenny | Blue | |
| [012347] | Alex | Red | Pike |
| [012347] | Alex | Red | Cod |
+------------+--------+------+--------+