SQL中的Select Distinct值

3
我有一个像这样的表格:
-------------------------------------------------------------------
id | title | image  | name |
-------------------------------------------------------------------
1  | xyzab | so.jpg | googl |
2  | acbde | am.jpg | artic |
3  | xyzab | pp.jpg | other |

我希望选择独特或不同的标题,并附带其图像和名称。不想重复数值。我使用以下代码:

SELECT DISTINCT title,image,name,id FROM `some_table`

但这并不能很好地运行。

注意:原帖中使用了MySQL。


你正在运行哪个版本的SQL? - Curtis
3个回答

5

DISTINCT可以确保没有两条记录完全匹配,因此这是正确的。

如果您想返回唯一的标题,您需要决定返回什么图像和名称。

您可以使用带有聚合函数的分组来解决此问题。例如:

SELECT title, MIN(image), MIN(name), MIN(id)
FROM `some_table`
GROUP BY title

但这取决于你想要什么样的结果...

因为它没有正常工作。当我在我的测试表上执行此操作时,我得到以下结果:acbde |am.jpg | artic | 2 xyzab | pp.jpg | googl | 1 具有ID 1的条目具有图像so.jpg而不是pp.jpg。我认为这不是期望的效果? - dwalldorf
1
OP没有具体说明他们想要如何处理额外的列。如果我使用SUM而不是MIN,那么您将看不到与任何现有列匹配的数据。我只是随机选择了一个聚合函数作为示例,数据不相关。 - Curtis

0

你需要指定一个胜利者...换句话说,如果有重复的标题但其他列中的数据不同,你需要选择一个...

例如,你可以尝试这样做。

select * from 'some_table' where id in (select min(id) from 'some_table' group by title)

1
抱歉,在我写答案的时候,另一个人已经回答了... 我会将其保留,因为它展示了在相同思路下另一种方法。 - John Sobolewski

0

DISTINCT 不适用于关键字后的单个字段,而是应用于您选择语句中的字段。您要查找的是 GROUP BY

SELECT title,image,name,id FROM some_table GROUP BY title


它将类似于图像,名称,ID需要在聚合函数中,如果不在Group by子句中。 - Curtis
你正在按标题分组。这意味着每个记录只有一个标题。如果“title”是“xyzab”,那么“image”会是什么? - Curtis
我已经按照 Basic Bridge 的建议重建了表格并执行了我的查询。没有错误。 - dwalldorf
1
结果是acbde | am.jpg | artic | 2xyzab | so.jpg | googl | 1 - dwalldorf
2
我在SQL Server Management Studio 2008中进行了测试,你的答案无法执行。错误是在select列表中,列'some_table.image'无效,因为它不包含在聚合函数或GROUP BY子句中。 - musefan
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接