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

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

就像这样:

SELECT DISTINCT field1, * 
FROM table;

当前回答

你可以用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子句查询中选择的行。

其他回答

Try

SELECT table.* FROM table 
WHERE otherField = 'otherValue'
GROUP BY table.fieldWantedToBeDistinct
limit x

只需将所有字段包含在GROUP BY子句中。

您正在寻找一个由:

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 field1 in 
(
  select distinct field1 from table
)

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

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

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