从另一个表创建表 - MYSQL 到 MSSQL 的转换

Posted

技术标签:

【中文标题】从另一个表创建表 - MYSQL 到 MSSQL 的转换【英文标题】:Create Table from Another Table - MYSQL to MSSQL conversion 【发布时间】:2017-07-26 03:43:26 【问题描述】:

我正在将数据库从 mysql 转换为 MSSQL/TSQL,但无法在 MSSQL 中使用以下 MYSQL 查询。寻找一双新的眼睛,看看我错过了什么。

工作 MYSQL 查询:

CREATE TABLE tempTable 
AS (SELECT * FROM Note WHERE createdate IN (SELECT MAX(createdate) 
FROM Note GROUP BY `taskPK`));

查询查找给定 ID 的注释行的最大日期。可能有多个具有相同 ID 的 Note 行,它会找到最新的行并将其插入到新表中。

不工作的 MSSQL 示例 1:('(') 附近的语法不正确

CREATE TABLE tempTable 
AS(SELECT * FROM dbo.Note WHERE createdate IN (SELECT MAX(createdate) 
FROM dbo.Note GROUP BY taskPK));

非工作 MSSQL 示例 2:(关键字 INTO 附近的语法不正确)

SELECT * 
FROM Note 
WHERE createdate IN (SELECT MAX(createdate) FROM Note GROUP BY taskPK) 
INTO tempTable FROM Note;

这个新表(一旦创建)将用于以下查询(我还没有在 MSSQL 中测试过):

SELECT Task.id, Task.taskdescription, Task.status, TaskSchedule.date, TaskGroups.name, tempTable.createDate FROM Task 
LEFT JOIN TaskSchedule ON Task.id = TaskSchedule.taskPK
LEFT JOIN TaskGroups ON Task.taskgroupid = TaskGroups.id
LEFT JOIN tempTable ON Task.id = tempTable.taskPK
WHERE Task.userPK = '$userPK' AND Task.status = 'Open'
ORDER BY tempTable.createDate DESC;

上面的查询选择了一个任务,其中包括我遇到问题的上一个查询中的最新注释 - 添加这个以防我让它变得比它需要的更困难。

【问题讨论】:

【参考方案1】:

你不能在 mssql 中使用 Create table asSelect table into

用途:

SELECT * INTO tempTable FROM Note N
WHERE N.createdate IN (SELECT MAX(N1.createdate) FROM Note N1 GROUP BY N1.taskPK)

【讨论】:

以上是关于从另一个表创建表 - MYSQL 到 MSSQL 的转换的主要内容,如果未能解决你的问题,请参考以下文章

从另一个没有数据的表的结构创建表

Mysql从另一个数据库创建到表的符号链接

如何修改mssql数据库编码

仅将表数据从 MSSQL 迁移到 MySQL

如何将单个 MSSQL 表导出到 MySQL?

使用Navicat把MSSQL数据库表转换导入到MySql