简体   繁体   English

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

[英]Create Table from Another Table - MYSQL to MSSQL conversion

I'm in the process of converting a database from MYSQL to MSSQL/TSQL, and I can't get the following MYSQL query to work in MSSQL. 我正在将数据库从MYSQL转换为MSSQL / TSQL,但无法在MSSQL中使用以下MYSQL查询。 Looking for a fresh set of eyes to see what I'm missing. 寻找新鲜的眼睛看我所缺少的。

Working MYSQL Query: 工作的MYSQL查询:

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

The query looks for the max date of a note row for a given id. 查询将查找给定ID的注释行的最大日期。 There may be multiple Note rows with the same ID and it will find the newest row and insert it into the new table. 可能会有多个具有相同ID的Note行,它将找到最新的行并将其插入到新表中。

Non-Working MSSQL Example 1: (Incorrect Syntax near '(') 非工作MSSQL示例1 :( “(')附近的语法不正确

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

Non-Working MSSQL Example 2: (Incorrect Syntax near the keyword INTO) 非工作MSSQL示例2 :(关键字INTO附近的语法不正确)

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

This new table (once created) will be used in the following query (which I haven't tested yet in MSSQL): 此新表(一旦创建)将在以下查询中使用(我尚未在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;

The above query selects a task that includes the newest note from the previous query I'm having problems with -- adding this incase I'm making this more difficult than it needs to be. 上面的查询从一个我遇到问题的上一个查询中选择了一个包含最新笔记的任务,以防万一,使我变得更加困难。

You can't use Create table as or Select table into in mssql 您不能在mssql中使用Create table asSelect table into

Use: 采用:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM