这是一个业余问题。我没有使用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
来做这件事,但我不知道从哪里开始。
答案 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)
答案nes为MySql
提供了很好的效果,并且正确回答了问题。
我很好奇如何在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
只是想分享,对不起,如果被认为是偏离主题