首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL:选择DISTINCT vs SELECT DISTINCT ON (id)

PostgreSQL:选择DISTINCT vs SELECT DISTINCT ON (id)
EN

Stack Overflow用户
提问于 2016-09-16 23:10:39
回答 1查看 2.2K关注 0票数 0

让许多用户属于许多组。

代码语言:javascript
复制
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)
);

获取属于组的所有用户的集合。

代码语言:javascript
复制
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列(而不是所有列)是否重复?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-17 12:55:31

如果只从users表中选择(我想,用户已经是不同的),则不需要distinct。

代码语言:javascript
复制
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保证了它的存在。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39541241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档