上記のStrawberryのコメントが示すように、これを行う方法はありますが、それはとても醜いです。それは、ダクトテープを使用して高価なキッチンの改造を終えるようなものです。このようにデータベースを設計した人に憤慨するはずです。
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 |
+----------+---------------+
このクエリの複雑さと、テーブルスキャンを強制されて最適化できないという事実から、IDのリストを区切り文字列に保存することの何が問題になっていますか 。
より良い解決策は、グループの個々のメンバーを単独で行に格納する3番目のテーブルを作成することです。つまり、グループごとに複数の行があります。
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)