Mysql DISTINCT masih mengembalikan nilai pendua
P粉369196603
P粉369196603 2024-02-21 13:25:49
0
2
327

Bagaimana untuk mengelak daripada berada di friends 上重复,我仍然得到两个 bob,而不是只有一个 bob

Persediaan meja saya:

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

Pertanyaan yang saya gunakan:

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;

Keputusan semasa:

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

Jangkaan saya:

name    friends
Matt    Lance,Bob
Tim Lance,Bob

P粉369196603
P粉369196603

membalas semua(2)
P粉706038741

Nama u anda berbeza daripada nama f. nama

Cuba ini

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粉714844743

Anda hanya perlu GROUP_CONCAT() 中使用 DISTINCT:

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

Perhatikan bahawa, SELECT DISTINCT ... 在您的查询中没有意义,因为您使用的是 GROUP BY , ia mengembalikan baris yang berbeza untuk setiap pengguna.

Lihat Demo.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!