Seperti yang tersirat oleh komentar Strawberry di atas, ada cara untuk melakukan ini, tetapi sangat jelek. Ini seperti menyelesaikan renovasi dapur mahal Anda menggunakan lakban. Anda seharusnya merasa kesal terhadap orang yang mendesain database dengan cara ini.
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;
Keluaran, diuji pada MySQL 5.6:
+----------+---------------+
| id_group | Names |
+----------+---------------+
| 1 | Joe Mary Bill |
| 2 | Fred Mary |
| 3 | Jack Joe |
+----------+---------------+
Kompleksitas kueri ini, dan fakta bahwa kueri ini akan dipaksa untuk melakukan pemindaian tabel dan tidak dapat dioptimalkan, akan meyakinkan Anda tentang apa yang salah dengan menyimpan daftar id dalam string yang dibatasi .
Solusi yang lebih baik adalah membuat tabel ketiga, di mana Anda menyimpan masing-masing anggota grup pada satu baris dengan sendirinya. Artinya, beberapa baris per grup.
CREATE TABLE group_name (
id_group INT NOT NULL,
id_name INT NOT NULL,
PRIMARY KEY (id_group, id_name)
);
Kemudian Anda dapat membuat kueri dengan cara yang lebih sederhana, dan Anda memiliki kesempatan untuk membuat indeks untuk membuat kueri dengan sangat cepat.
SELECT id_group, GROUP_CONCAT(names SEPARATOR ' ') AS names
FROM groups
JOIN group_name USING (id_group)
JOIN names USING (id_name)