如何从MySQL表中获取不同的记录?

16

我有一张名为student的表格,像这样

id | name | zip 
1  | abc  | 1234
2  | xyz  | 4321
3  | asd  | 1234
我想获取所有记录,但邮政编码不应重复。因此,在上表记录的情况下,应获取记录1和2。不会获取记录3,因为它具有已经在记录1中的邮政编码。

“我想获取所有记录”与“不得获取第3条记录”相冲突。您是要获取所有记录还是一个唯一的zip集合,其中第一条记录具有该值? - Albireo
7个回答

41
SELECT DISTINCT fieldName FROM tableName;
下面的查询语句仅选择不同的“zip”字段。
SELECT DISTINCT zip FROM student;

SELECT * FROM tableName GROUP BY fieldName;
以下查询将选择所有字段以及唯一的邮政编码字段。

以下查询将选择所有字段以及唯一的邮政编码字段。

SELECT * FROM student GROUP BY zip;

SELECT DISTINCT zip FROM tableName;SELECT DISTINCT FROM tableName; 有什么区别?这两个查询语句的结果可能不同吗? - Student
1
在 DISTINCT 后面应该提供字段名。之前是一个打字错误。 - Mukesh Chapagain
1
SELECT DISTINCT FROM tableName; 会导致 SQL 语法错误。正确的写法是 SELECT DISTINCT fieldName FROM tableName;。 - Mukesh Chapagain
这个查询如何显示记录超出了我的理解。更让我不解的是它怎么得到了5个赞。 - ypercubeᵀᴹ

7

尝试

 SELECT DISTINCT(zip),id,name FROM student;

或者

  SELECT * FROM student GROUP BY zip;

1
SELECT DISTINCT(zip),id,name FROM student; 这条语句不会起作用。如果id或name是唯一的,它将显示重复的zip。 - Mukesh Chapagain
有没有解决方案可以让 SELECT DISTINCT(zip),id,name FROM student; 出现 ID - Haithem Rihane

5

虽然在MySQL中你可以这样做:

SELECT *
FROM student
GROUP BY zip 

我会选择:

SELECT * 
FROM student t
  JOIN 
    ( SELECT MIN(id) AS minid
      FROM student
      GROUP BY zip
    ) AS grp
    ON grp.minid = t.id

2
“由于其他栏目可能也有一些趣味性...”
 SELECT y.*
 FROM yourTable y,
 (SELECT MIN(y2.id)
  FROM yourTable y2
  GROUP BY y2.zip) ilv
 WHERE ilv.id=y.id;

(或者您可以使用max-concat trick)。
更新。
Oracle现在已经从链接页面中删除了最大连接技巧 - 但是它在互联网的其他地方描述 了。

你在 yourTable y 后面缺少了一个逗号。 - ypercubeᵀᴹ

0

尝试使用

Select Distinct(zip),id,name group by zip;

0

如果我像下面这样使用,会有什么问题吗?

select distinct zip,name,id from student;

-2
select id, name, distinct(zip) from student;

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