SELECT DISTINCT field1, field2, field3, ......
FROM table;

我试图完成以下SQL语句,但我希望它返回所有列。 这可能吗?

就像这样:

SELECT DISTINCT field1, * 
FROM table;

当前回答

如果我没理解错的话,你的问题和我刚才遇到的问题很相似。您希望能够将DISTINCT的可用性限制在指定的字段,而不是将其应用于所有数据。

如果你使用GROUP BY而没有聚合函数,你GROUP BY的字段将是你的DISTINCT字段。

如果你有疑问:

SELECT * from table GROUP BY field1;

它将显示基于field1的单个实例的所有结果。

例如,如果您有一个包含名称、地址和城市的表。一个人有多个地址记录,但你只想要这个人的一个地址,你可以这样查询:

SELECT * FROM persons GROUP BY name;

结果将是该名称的一个实例及其地址将出现,而另一个实例将从结果表中被省略。注意:如果你的字段有原子值,如firstName, lastName,你想要分组。

SELECT * FROM persons GROUP BY lastName, firstName;

因为如果两个人有相同的姓氏,而你只按姓氏分组,那么其中一个人将从结果中被忽略。你需要考虑到这些事情。希望这能有所帮助。

其他回答

您正在寻找一个由:

select *
from table
group by field1

偶尔也可以用不同的on语句来写:

select distinct on field1 *
from table

然而,在大多数平台上,上述两种方法都不能工作,因为其他列上的行为未指定。(第一种方法适用于MySQL,如果你使用的是MySQL的话。)

您可以获取不同的字段,并坚持每次选择任意一行。

在一些平台上(例如PostgreSQL, Oracle, T-SQL),这可以直接使用窗口函数完成:

select *
from (
   select *,
          row_number() over (partition by field1 order by field2) as row_number
   from table
   ) as rows
where row_number = 1

在其他(MySQL, SQLite)上,您需要编写子查询,使您将整个表与其本身连接起来(示例),所以不推荐。

SELECT * from table where field in (SELECT distinct field from table)

SELECT DISTINCT FIELD1, FIELD2, FIELD3 FROM TABLE1,如果这三列的值在表中都是唯一的。

例如,如果您的名字有多个相同的值,但所选列中的姓和其他信息不同,则该记录将包含在结果集中。

SELECT *
FROM tblname
GROUP BY duplicate_values
ORDER BY ex.VISITED_ON DESC
LIMIT 0 , 30

在ORDER BY我刚刚把例子放在这里,你也可以在这里添加ID字段

将GROUP BY添加到要检查重复的字段 您的查询可能看起来像

SELECT field1, field2, field3, ......   FROM table GROUP BY field1

将检查Field1以排除重复记录

或者你可能会问

SELECT *  FROM table GROUP BY field1

字段1的重复记录被排除在SELECT中