Home > database >  Mysql DISTINCT still return duplicate value
Mysql DISTINCT still return duplicate value

Time:02-06

How can i avoid getting duplicate on friends i still get two bob instead only one bob

My table setup:

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);

query i use:

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;

current result:

name    friends
Matt    Lance,Bob,Bob
Tim Lance,Bob

what i expect:

name    friends
Matt    Lance,Bob
Tim Lance,Bob

CodePudding user response:

You need DISTINCT inside GROUP_CONCAT() only:

SELECT u.name,
       GROUP_CONCAT(DISTINCT f.name) AS friends
................................................

Note that SELECT DISTINCT ... does not make sense in your query because you are using GROUP BY which returns distinct rows for each user.

See the demo.

CodePudding user response:

You have distinct u.name not in f.name

Try this

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;
  •  Tags:  
  • Related