【问题标题】:MySQL SELECT DISTINCT how to join some corresponding columns to query resultMySQL SELECT DISTINCT 如何将一些对应的列加入查询结果
【发布时间】:2017-10-18 14:19:32
【问题描述】:

我有一张桌子

id,column1, column2, column3,column4,column5

MySQL SELECT DISTINCT 准确返回我需要的内容,并且此查询必须保持原样

SELECT DISTINCT column1,column3 from tablename

但作为输出,我只有上面 DISTINCT 查询中要求的 2 列

column1,column3

问题 - 如何将同一表中的其他相应列加入到此结果中?

例如

column1,column3,id,column5

在谷歌呆了几个小时,两个“最近”的想法有点像

SELECT DISTINCT column1,column3 
from tablename AS tbl1 
INNER JOIN (SELECT id,column5 from tablename) AS tbl2

但是这样的查询无论如何只会返回我

column1,column3

我的预期结果应该是 column1,column3 (exactly as a result of SELECT DISTINCT) + two other columns id,column3 - 这样我就可以将此结果保存到一个有 4 列的新表中。 但正如我上面所说的,我只有两列。

添加了示例 http://sqlfiddle.com/#!9/1e4472/1

请注意 - 查询结果不显示 ID 4,因为此 ID 在两个字段(公司和城市)中都有重复。所以这正是我所需要的。

那么,如何在结果中不仅显示 COMPANY 和 CITY,还显示 ID 和 MANAGER 等?

【问题讨论】:

  • 一些样本数据和预期结果会让你的问题更清楚。
  • 如果您想在结果集中添加一个额外的列(即第 5 列),那么您必须在查询中选择该列。如果不修改现有查询,就无法做到这一点。
  • 为什么我说预期结果和数据样本 - 我的意思是您实际拥有的数据(值)的示例,以及您希望它在最后的样子。不言而喻!但表格格式。
  • 先生们,你们都说得对,让我在sqlfiddle准备一个例子,大约30分钟后返回。
  • 看看@Harshil 的回答。 distinct 不使用任何特定的。您需要在 ID 上使用 min 或 max。

标签: mysql select distinct


【解决方案1】:

在重复的情况下,如果您想显示具有相同公司和城市值的第一条(原始)记录(例如,在这里您想显示 id=1 而不是 id=4),那么以下查询应该有效:

SELECT min(id) as id,manager,company,city 
FROM DistinctResult
group by company,city;

Click here for Demo

希望对你有帮助!

【讨论】:

  • 完美解决方案!是的,我在尝试 JOIN 和 CONCAT 时走错了方向。
【解决方案2】:

简单地说:

SELECT DISTINCT Column1,Column3,id,column5

或者,如果这些列的值超过 1 个:

 SELECT Column1,Column3,MAX(id),MAX(column5)
 GROUP BY Column1,Column3

但这真的取决于要求,你也不是很清楚。

【讨论】:

  • 我已经编辑了我的问题,SELECT DISTINCT 必须保持不变,因为它返回的正是我需要的。如果我可以使用SELECT DISTINCT Column1,Column3,id,column5,那就很简单了——但不行,它不能解决
  • 编辑后就更不清晰了!为什么一定要这样?!为什么不只是发布数据样本和预期结果,以便我更好地理解?!为什么不使用替代品?!或者简而言之 - 你想做什么???? @Serge
猜你喜欢
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2021-03-02
  • 2018-01-14
  • 2012-10-30
  • 2013-12-14
  • 1970-01-01
  • 2012-08-26
相关资源
最近更新 更多