正如上面草莓的评论所暗示的,有一种方法可以做到这一点,但是它是如此丑陋。这就像用胶带完成昂贵的厨房装修一样。您应该对以这种方式设计数据库的人感到不满。
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;
+----------+---------------+
| 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)