Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按结果集中未包含的列排序有意义吗?_Mysql_Sql_Sql Server - Fatal编程技术网

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

Mysql 按结果集中未包含的列排序有意义吗?,mysql,sql,sql-server,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 AN

我发现自己能够将以下查询从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中,存在两个问题:

我需要按音频分组\u id>>明白吗 SQL Server不允许我按statflag和serverflag排序 由于明显的原因,他们不包括在GROUP BY中,也不包括在GROUP BY中 在聚合函数中。 问题:

在上面提到的MySQL查询中,按结果集中不包含的列排序有意义吗?如果在迁移到SQL Server时忽略ORDER BY,迁移是否安全

将上述MySQL查询转换为SQL最聪明的方法是什么 服务器


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

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;
这修复了联接语法,使显式联接始终是联接表的首选方式。它将按添加组。MySQL中的原始查询将只返回一行。它通过使用聚合函数来更改顺序


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

以下是一个在两个数据库中都可以使用的版本:

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;
这修复了联接语法,使显式联接始终是联接表的首选方式。它将按添加组。MySQL中的原始查询将只返回一行。它通过使用聚合函数来更改顺序


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

谢谢,MySQL中的原始查询只会返回一行,这让人大开眼界,所以我不需要order by子句,是吗?通常情况下,我会在select中包含这些列。通常,我也会。通常迟早会有人抱怨订单错了。在select子句中包含这样的列可以很容易地看到问题。您不必显示select子句中的每一列或表达式。@Abhijeet。大概是为了每个audio_id获取一行。如果不是,请从select、group by子句和order by子句中删除audio_id。谢谢,MySQL中的原始查询将只返回一行,这让人大开眼界,因此我不需要order by子句,是吗?通常,我会在select中包含这些列。通常,我也会。通常迟早会有人抱怨订单错了。在select子句中包含这样的列可以很容易地看到问题。您不必显示select子句中的每一列或表达式。@Abhijeet。据推测,目的是为每个audio_id获取一行。如果不是,请从select、group by子句和order by子句中删除audio_id。按serverflag排序是不相关的,因为每个WHERE子句总是1。按serverflag排序是不相关的,因为每个WHERE子句总是1。