Как следует из комментария Строберри выше, есть способ сделать это, но это так ужасно. Это как отделка вашей дорогой кухни переделывать с помощью клейкой ленты. Вы должны испытывать негодование по отношению к человеку, который разработал базу данных таким образом.
SELECT g.id_group, GROUP_CONCAT(n.Names SEPARATOR ' ') AS Names
FROM groups AS g JOIN names AS n
ON FIND_IN_SET(n.id_names, REPLACE(g.Name, '|', ','))
GROUP BY g.id_group;
Вывод, протестировано на MySQL 5.6:
+----------+---------------+
| id_group | Names |
+----------+---------------+
| 1 | Joe Mary Bill |
| 2 | Fred Mary |
| 3 | Jack Joe |
+----------+---------------+
Сложность этого запроса и тот факт, что он будет вынужден выполнять сканирование таблицы и не может быть оптимизирован, должны убедить вас в что не так с хранением списка идентификаторов в строке с разделителями .
Лучшее решение - создать третью таблицу, в которой вы сохраняете каждого отдельного члена группы в отдельности. То есть несколько строк на группу.
CREATE TABLE group_name (
id_group INT NOT NULL,
id_name INT NOT NULL,
PRIMARY KEY (id_group, id_name)
);
Тогда вы можете сделать запрос более простым способом, и у вас есть возможность создавать индексы, чтобы сделать запрос очень быстрым.
SELECT id_group, GROUP_CONCAT(names SEPARATOR ' ') AS names
FROM groups
JOIN group_name USING (id_group)
JOIN names USING (id_name)