从单个表中选择每个公司一个用户

时间:2014-02-10 11:11:46

标签: mysql sql self-join

这是一个业余问题。我没有使用MySQL工作太多,但我需要从表中提取查询,我不知道我要去哪里。

表格core_user包含以下字段:

user_id
user_display_name
user_name
user_password
user_email
user_group
user_role
date_registered
language
timezone
region

我需要编写一个查询来提取以下Column s:

user_display_name
user_name
user_password
user_email

有时最多有20个用户可以拥有相同的user_display_name。我只希望查询每user_display_name返回一个结果。用户是谁并不重要,但我可以让同一家公司的20个人登录我的新模块。

有人可以帮我写一下这个查询。我读过关于做SELF JOIN来做这件事,但我不知道从哪里开始。

4 个答案:

答案 0 :(得分:4)

您可以GROUP BY user_display_name 字段,如下所示;

SELECT user_display_name, user_name, user_password, user_email
FROM core_user
GROUP BY user_display_name

这适用于MySQL列出唯一显示名称,如您在问题描述中所建议的那样:

  

我只希望查询每个user_display_name

返回一个结果

答案 1 :(得分:0)

您可以使用distinct来为所有相同的用户名仅获取一个结果 SELECT DISTINCT user_display_name, user_name, user_password, user_email
FROM core_user

答案 2 :(得分:0)

根据我的要求,您需要做的就是:

Select distinct user_display_name, user_name, user_password, user_email 
from core_user;

这将从表中提供所有唯一结果集。

答案 3 :(得分:0)

答案nesMySql提供了很好的效果,并且正确回答了问题。

我很好奇如何在Sql Server中执行此操作,因为投影不允许使用未包含在分组中的列。所以我开始认为这是一个很好的解决方案;

DECLARE @table1 TABLE
(
  id int primary key,
  name nvarchar(50), 
  email nvarchar(50), 
  number int
) 

INSERT INTO @table1 VALUES (1, 'name1', 'a@a.com', 1)
INSERT INTO @table1 VALUES (2, 'name1', 'b@b.com', 2)
INSERT INTO @table1 VALUES (3, 'name2', 'c@c.com', 5)

SELECT t1.name, t1.number, t1.email 
FROM @table1 As t1 JOIN (SELECT name, MAX(id) As maxId FROM @table1 GROUP BY name) As t2
    ON t2.maxId = t1.id

别名t2子查询的结果,它返回带有其他列id信息的不同名称(使用MAX()作为聚合来保证只有一个名字而且没有重复,它可以是MIN()t2 已加入 t1 id字段,确保唯一名称。

唯一的约束是;必须有id字段或任何其他 unique key

只是想分享,对不起,如果被认为是偏离主题