![](/img/trans.png)
[英]select distinct count(id) vs select count(distinct 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.