Maison > Questions et réponses > le corps du texte
Comment éviter d'être dedans friends
上重复,我仍然得到两个 bob
,而不是只有一个 bob
Configuration de ma table :
CREATE TABLE users( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) ); INSERT INTO users (id, name) VALUES (1, "Gregor"), (2, "Liza"), (3, "Matt"), (4, "Tim"), (5, "Lance"), (6, "Bob"); CREATE TABLE committee( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT, friend_id INT, member_id INT, FOREIGN KEY (`user_id`) REFERENCES `users` (`id`), FOREIGN KEY (`friend_id`) REFERENCES `users` (`id`), FOREIGN KEY (`member_id`) REFERENCES `users` (`id`) ); INSERT INTO committee (user_id, friend_id, member_id) VALUES (3, 5, 1), (4, 5, 1), (3, 6, 2), (3, 6, 2), (4, 6, 2);
La requête que j'ai utilisée :
SELECT DISTINCT u.name, GROUP_CONCAT(f.name) AS friends FROM committee c INNER JOIN users u ON (u.id = c.user_id) INNER JOIN committee c2 ON c2.user_id = c.user_id INNER JOIN users AS f ON (f.id = c2.friend_id) WHERE (c.member_id = 1) GROUP BY u.id;
Résultats actuels :
name friends Matt Lance,Bob,Bob Tim Lance,Bob
Mes attentes :
name friends Matt Lance,Bob Tim Lance,Bob
P粉7060387412024-02-22 00:49:54
Votre u.name est différent de f.name
Essayez ceci
SELECT u.name, GROUP_CONCAT(distinct f.name) AS friends FROM committee c INNER JOIN users u ON (u.id = c.user_id) INNER JOIN committee c2 ON c2.user_id = c.user_id INNER JOIN users AS f ON (f.id = c2.friend_id) WHERE (c.member_id = 1) GROUP BY u.name;
P粉7148447432024-02-22 00:23:39
Il vous suffit de GROUP_CONCAT()
中使用 DISTINCT
:
SELECT u.name, GROUP_CONCAT(DISTINCT f.name) AS friends ................................................
Notez que SELECT DISTINCT ...
在您的查询中没有意义,因为您使用的是 GROUP BY
, il renvoie des lignes différentes pour chaque utilisateur.
Voir la Démo.