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

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

就像这样:

SELECT DISTINCT field1, * 
FROM table;

当前回答

从您的问题措辞中,我了解到您希望为给定字段选择不同的值,并为每个这样的值列出同一行中的所有其他列值。大多数dbms不允许使用DISTINCT或GROUP BY,因为结果是不确定的。

可以这样想:如果field1出现了不止一次,那么将列出field2的值(假设在两行中field1的值相同,但在这两行中field2的值不同)。

然而,你可以使用聚合函数(显式地为你想要显示的每个字段),并使用GROUP BY而不是DISTINCT:

SELECT field1, MAX(field2), COUNT(field3), SUM(field4), ....
FROM table GROUP BY field1

其他回答

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

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

将检查Field1以排除重复记录

或者你可能会问

SELECT *  FROM table GROUP BY field1

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

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

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

好问题@aryaxt——你可以看出这是一个好问题,因为你5年前问过这个问题,而我今天在试图找到答案时偶然发现了它!

我只是试图编辑接受的答案,以包括这一点,但如果我的编辑没有使它:

如果你的表不是那么大,并且假设你的主键是一个自动递增的整数,你可以这样做:

SELECT 
  table.*
FROM table
--be able to take out dupes later
LEFT JOIN (
  SELECT field, MAX(id) as id
  FROM table
  GROUP BY field
) as noDupes on noDupes.id = table.id
WHERE
  //this will result in only the last instance being seen
  noDupes.id is not NULL

你可以用with子句来实现。

例如:

WITH c AS (SELECT DISTINCT a, b, c FROM tableName)
SELECT * FROM tableName r, c WHERE c.rowid=r.rowid AND c.a=r.a AND c.b=r.b AND c.c=r.c

这还允许您只选择WITH子句查询中选择的行。

我建议使用

SELECT  * from table where field1 in 
(
  select distinct field1 from table
)

这样,如果field1在多个行中有相同的值,将返回所有记录。