MSSQL 与 MYSQL 中的语句等价

Posted

技术标签:

【中文标题】MSSQL 与 MYSQL 中的语句等价【英文标题】:Equivalent of MSSQL with statement in MYSQL 【发布时间】:2014-07-01 15:05:02 【问题描述】:

mysql中是否有与下面语句等效的语句?

With Tmp1 as (
        Select Distinct EmpID, TypeID 
        From tb_deductionBalance
), Tmp2 as (
    Select *,
       row_number() OVER ( order by empID /* no employeeID in Tmp1 */) as RowNum 
    From Tmp1
)
Select * From Tmp2
Where RowNum Between @Start and @End

我必须将一个 mssql 数据库迁移到 mysql,并且有很多这样的语句,如果无法翻译,在 mysql 中重新创建需要更多时间。

谢谢

【问题讨论】:

MySQL 不支持common table expressions。相反,您必须使用子查询。也不支持row_number等解析函数——你必须自己写。 @sgeddes,这正是 OP 所要求的,MSSQL 与 MYSQL 中的语句等效 @astander -- 我编辑了我的评论。 OP 可以改用子查询。 【参考方案1】:
SELECT DISTINCT EmpID, TypeID
FROM tb_deductionBalance
ORDER BY empID
LIMIT YourStartNumber - 1, YourEndNumber - YourStartNumber

很遗憾,您不能在 LIMIT 中使用变量,因此您需要在此处使用实际整数。例如,如果您想要第 3 到 10 行的结果,则需要使用:

SELECT DISTINCT EmpID, TypeID
FROM tb_deductionBalance
ORDER BY empID
LIMIT 2, 7

【讨论】:

以上是关于MSSQL 与 MYSQL 中的语句等价的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Schema 中的 MySQL 数据类型 SET 等价物是啥?

等价于 JavaScript 中的 continue 语句

这些片段是等价的吗? (NVL 与例外)

为啥这两个语句是等价的

MySQL LOCATE 与 Bigquery 的等价物是啥?

SQL Server 中的 MYSQL“FLUSH PRIVILEGES”等价物?