按结果集中未包含的列排序是否有意义?

时间:2014-06-01 16:08:42

标签: mysql sql sql-server

我发现自己能够从MySQL查询到SQL Server以下:

SELECT
    ass.audio_id,
    SUM(au.audiolength) AS AudioFileLength
FROM    Table1 ass,
        Table2 au
WHERE au.audioid = ass.audio_id
AND ass.auserid = '001'
AND ass.delflag = 0
AND au.delflag = 0
AND tflag = 0
AND ass.serverflag = 1
ORDER BY ass.statflag DESC, ass.serverflag DESC

查询在MySQL中运行良好。但在SQL Server中,有两个问题:

  • 我需要GROUP BY audio_id>>理解
  • SQL Server不允许我订购statflag& serverflag 由于显而易见的原因,它们不包括在GROUP BY中,也不包括在内 在AGGREGATE函数中。

问题:

  • 在上面的MySQL查询中,按结果集中未包含的列进行排序是否有意义?如果我在迁移到SQL Server时忽略ORDER BY,那么它是安全迁移吗?

  • 上述MySQL查询到SQL的最明智的解决方法是什么 服务器

1 个答案:

答案 0 :(得分:4)

这是一个适用于两个数据库的版本:

SELECT ass.audio_id, SUM(au.audiolength) AS AudioFileLength
FROM cur_assigntable ass JOIN
     cur_audiofile_master au
     ON au.audioid = ass.audio_id
WHERE ass.auserid = '141' AND
      ass.delflag = 0 AND
      au.delflag = 0 AND
      tflag = 0 AND
      ass.serverflag = 1
GROUP BY ass.audio_id
ORDER BY MIN(ass.statflag) DESC, MIN(ass.serverflag) DESC;

这修复了join语法以使用显式连接(始终是连接表的首选方法)。它添加了group by。 MySQL中的原始查询只返回一行。它将order by更改为使用聚合函数。

在某些情况下,您希望按不在结果集中的列进行排序。我不知道结果是如何使用的,所以很难说。通常,我会在select中包含此类列。