让许多用户属于许多组。
CREATE TABLE users (
id bigserial PRIMARY KEY,
username varchar(50) NOT NULL
);
CREATE TABLE groups (
id bigserial PRIMARY KEY,
name varchar(50)
);
CREATE TABLE group_members (
group_id bigint NOT NULL REFERENCES groups ON DELETE CASCADE,
user_id bigint NOT NULL REFERENCES users ON DELETE CASCADE,
PRIMARY KEY (group_id, user_id)
);获取属于组的所有用户的集合。
SELECT DISTINCT u.id, username
FROM groups AS g
JOIN group_members AS m
ON m.group_id = g.id
JOIN users AS u
ON u.id = m.user_id见这个SQL Fiddle。
使用SELECT DISTINCT ON (id) (在上面的SELECT查询中)比使用SELECT DISTINCT更快吗?
两个查询都返回相同的结果集。我宁愿使用SELECT DISTINCT,因为它更干净。
但是,假设users表还有几个列。SELECT DISTINCT是否足够聪明,只检查id列(而不是所有列)是否重复?
发布于 2016-09-17 12:55:31
如果只从users表中选择(我想,用户已经是不同的),则不需要distinct。
SELECT u.id, u.username
FROM users AS u
WHERE EXISTS ( SELECT *
FROM group_members AS m
WHERE u.id = m.user_id
);您不需要加入groups表,因为group_members表中的FK保证了它的存在。
https://stackoverflow.com/questions/39541241
复制相似问题