【发布时间】:2015-06-06 02:42:12
【问题描述】:
我正在尝试将 MySQL 数据库转换为 MSSQL 数据库,但在翻译查询时遇到了一些问题,尤其是以下问题:
MySQL
SELECT GROUP_CONCAT( parent.Name
ORDER BY parent.Lft
SEPARATOR "«" ) AS Path, node.Description
FROM `DB`.`Categories` AS node, `DB`.`Categories` AS parent
WHERE node.Lft BETWEEN parent.Lft AND parent.Rgt AND node.ID = 2
GROUP BY node.Name, node.ID
ORDER BY node.Lft LIMIT 1;
而我得到的结果是这个,就是我想要得到的:
+-------------------------------+
| Path |
+-------------------------------+
| Master Node « Vehicles « Cars |
+-------------------------------+
MS SQL
我尝试使用这篇文章 https://stackoverflow.com/a/5981860/2098159 中的建议重新创建 MySQL 查询
SELECT STUFF((SELECT ' « ' + [Name] FROM [DB].[dbo].[Categories] FOR XML PATH ('')), 1, 1, '') AS [Path]
FROM [DB].[dbo].[Categories] AS node, [DB].[dbo].[Categories] AS parent
WHERE node.[Lft] BETWEEN parent.[Lft] AND parent.[Rgt] AND node.[ID] = 7
GROUP BY node.[Name], node.[ID], node.[Lft] ORDER BY node.[Lft];
而我得到的结果是这样的,无论我选择哪个ID:
+---------------------------------------------+
| Path |
+---------------------------------------------+
| « Master Node « Vehicles « Cars « Computers |
+---------------------------------------------+
此时我只创建了一个包含 4 条记录的表:主节点、车辆、汽车和计算机;只是为了测试。
我不知道我错过了什么。有人有建议吗?
提前致谢。
【问题讨论】:
-
获得 SQL 答案的最佳方法是创建一个 SQLFiddle。
-
LIMIT 1在 SQL Server 中是TOP(1);)。
标签: mysql sql sql-server group-concat sql-server-group-concat