Mysql 在子查询中使用Distinct

Mysql 在子查询中使用Distinct,mysql,sql,Mysql,Sql,如何基于一个不同的字段显示行中的所有字段(即此字段不应重复) 假设有一个名为Office_Roles的表,其字段和数据如下所示 Name Department Designation John Marketing Executive John Sales Executive John PR Executive 因此,我希望最终结果显示一行中的所有字段,但仅显示1个字段(不同) 输出类- 约翰营销(或销售)(或公关)主管 我在想类似的

如何基于一个不同的字段显示行中的所有字段(即此字段不应重复)

假设有一个名为Office_Roles的表,其字段和数据如下所示

Name   Department   Designation

John   Marketing    Executive
John   Sales        Executive
John   PR           Executive
因此,我希望最终结果显示一行中的所有字段,但仅显示1个字段(不同)

输出类-

约翰营销(或销售)(或公关)主管

我在想类似的事情

select * from Office_Roles where name =(select distinct name from Office_Roles);

我们如何正确地做这样的事情?我还想按顺序排序,并限制最终结果中每页的结果数…

我只想使用GROUP By

SELECT * FROM Office_Roles GROUP BY name;

简单。

查询的列数不能可变。您可以做的一件事是将这些值连接在一起:

select name, group_concat(Department) as departments,
       group_concat(Designation) as designations
from Office_Roles o
group by name

由于表中有3行匹配,因此无论哪种方式都将得到3行,您试图排除哪些行,以及查询如何知道哪些不显示?

这将不会准确地输出您想要的内容,但会查看它是否适合您。只是给你一个想法

select name, group_concat(Department SEPARATOR ' or ') as departments,
       Designation
from Office_Roles  a
group by name,Designation

你可以在这里玩SQL Fiddle

你是想加入
还是使用
存在
?用户
John有三个部门
,那么您想显示什么?@FreshPrinceOfSO我会在原始区域查询中使用左外连接,我认为这不会影响我所问问题的输出…您的问题不清楚。您只想在示例中为John选择一个随机行?显示您的示例输出,它将更清楚您想要什么。你说你想要“第一”行,但是第一行的定义是什么呢?关于
group\u concat(不同的名称)
<代码>:D
@JW。我真的不知道。这是一个关于什么可能有用的有根据的猜测。@GordonLinoff-我不需要group_concat()。。。关于dougis和medina的答案,请参见下面我的评论…我认为您确实需要团体concat,因为您强调您只需要一行。好吧,也许我没有正确理解。。。如何让子查询只返回john的1个,然后基于子查询的结果,外部查询获取其余字段…子查询中的distinct子句不是只返回3个John中的1个John,然后基于此John外部查询获取行中的其余字段吗?然后您必须创建一个Id字段,该字段在添加记录时动态递增,您可以与Id进行比较以获取必需的结果。否,子查询将为您提供1个John,然后该John将匹配外部查询中的所有3行。不管怎样,你都会得到3行。要从表结果集中排除哪些行。要测试用name=“John”替换子查询并查看得到的结果(这是一个单一结果),如果子查询中没有distinct,那么实际上在主查询中,子查询中的3个John中的每一个都会得到9行3。我以前尝试过这一点-我在mysql中读到,当不在Group By子句中使用聚合函数时,这类似于使用不同的。。。但我工作的客户可能更改了一些内容/上传了更多数据,但似乎不起作用。。因此,我认为最好使用可靠的方式(独特的)代替…嘿,伙计。。我100%确信这个查询是有效的。而且数据库的大小也无关紧要。请在这里发布错误和mysql服务器的版本,然后我可能会给你一个更准确的答案。