首页 > 解决方案 > 将查询从 MySQL 转换为 SQL Server(包括 GROUP BY)

问题描述

我正在尝试将此 MySQL 查询转换为 SQL Server,但我对 SQL Server 了解不多

SELECT 
  * 
FROM 
  Table1 AS T1 
  INNER JOIN Table2 AS T2 
    ON T1.Column1 = T2.ColumnX 
WHERE 
  T1.ColumnY = 'xxxx' 
GROUP BY 
  T1.Column1

有人可以帮助我吗?

标签: mysqlsqlsql-servertsqlgroup-by

解决方案


您的查询只是一个错误的查询,因为您使用的是select *with group by。此查询使用 MySQL 扩展。而且,最新版本的 MySQL 中的默认设置会产生错误。

这是将其转换为 SQL Server 的一种方法:

SELECT TOP (1) WITH TIES * 
FROM Table1 AS T1 INNER JOIN
     Table2 AS T2 
      ON T1.Column1 = T2.ColumnX 
WHERE T1.ColumnY = 'xxxx' 
ORDER BY ROW_NUMBER() OVER (PARTITION BY T1.Column1 ORDER BY (SELECT NULL)) ;

可能更好的方法(从性能角度来看)使用横向连接:

SELECT * 
FROM Table1 T1 CROSS APPLY
     (SELECT TOP (1) T2.*
      FROM Table2 T2 
      WHERE T1.Column1 = T2.ColumnX 
     ) T2
WHERE T1.ColumnY = 'xxxx' ;

Table2当有多个匹配项时,这两者都会选择任意行。


推荐阅读