如何选择DISTINCT行而不选择ORDER BY字段

时间:2010-04-07 07:19:30

标签: sql mysql distinct

所以我有两个学生表(PK sID)和导师(PK pID)。此查询

SELECT s.pID
FROM students s JOIN mentors m ON s.pID = m.pID
WHERE m.tags LIKE '%a%'
ORDER BY s.sID DESC;

提供此结果

pID
-------------
9
9
3
9
3
9
9
9
10
9
3
10  etc...

我正在尝试使用此排序获取不同导师ID的列表,因此我正在寻找生成的SQL

pID
-------------
9
3
10

如果我只是在SELECT子句中插入DISTINCT,我会得到意外的结果10,9,3(错误的顺序)。任何帮助非常感谢。

6 个答案:

答案 0 :(得分:4)

如果您不使用ORDER BY,则无法以任何预定义的顺序接收记录,因为数据库引擎会决定返回它们的顺序。

答案 1 :(得分:4)

SELECT s.pID
FROM students s JOIN mentors m ON s.pID = m.pID   
WHERE m.tags LIKE '%a%'
GROUP BY s.pID
ORDER BY MAX(s.sID) DESC

答案 2 :(得分:1)

试试这个:

SELECT s.pID
FROM students s JOIN mentors m ON s.pID = m.pID
WHERE m.tags LIKE '%a%'
GROUP BY s.pID
ORDER BY s.sID DESC;

即。 GROUP BY而不是DISTINCT应该保留顺序。

答案 3 :(得分:0)

使用不同的“ORDER BY s.sID DESC”后将无法工作,所以尝试使用像下面这样的somwthing

SELECT distinct(s.pID) as PID
FROM students s JOIN mentors m ON s.pID = m.pID
WHERE m.tags LIKE '%a%'
ORDER BY PID;

这将返回>> 3,9,10

答案 4 :(得分:0)

使用此

SELECT DISTINCT s.pID as PID
FROM students s JOIN mentors m ON s.pID = m.pID
WHERE m.tags LIKE '%a%'
ORDER BY s.sID DESC,1;

答案 5 :(得分:0)

经过多次努力之后,我有了这个

SELECT s.pID, MAX(s.sID) AS newest_student
FROM students s JOIN mentors m ON s.pID = m.pID
WHERE m.tags LIKE '%a%'
GROUP BY s.pID
ORDER BY newest_student DESC;

它给了我所需的9,3,10,但我有一个无用的字段返回它。 我希望有人能找到更好的解决方案。