繁体   English   中英

PostgreSQL:SELECT DISTINCT与SELECT DISTINCT ON(id)

[英]PostgreSQL: SELECT DISTINCT vs SELECT DISTINCT ON (id)

让许多用户属于多个组。

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列(而不是所有列)是否重复?

如果仅从用户表中进行选择,则不需要区别对待(我希望这些用户已经是区别对待的)

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 保证它存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM