我发现自己能够从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中,有两个问题:
audio_id
>>理解statflag
& serverflag
由于显而易见的原因,它们不包括在GROUP BY
中,也不包括在内
在AGGREGATE函数中。问题:
在上面的MySQL查询中,按结果集中未包含的列进行排序是否有意义?如果我在迁移到SQL Server时忽略ORDER BY
,那么它是安全迁移吗?
上述MySQL查询到SQL的最明智的解决方法是什么 服务器
答案 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
中包含此类列。