所以我有两个学生表(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(错误的顺序)。任何帮助非常感谢。
答案 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,但我有一个无用的字段返回它。 我希望有人能找到更好的解决方案。