mysql - 如何使用 GROUP_CONCAT 将 MySQL 查询正确转换为 MSSQL 查询

标签 mysql sql sql-server group-concat sql-server-group-concat

我正在尝试将 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 条记录的表:Master Node、Vehicles、Cars 和 Computers;仅用于测试。

我不知道我错过了什么。有人有建议吗?

提前致谢。

最佳答案

问题是您缺少 xml 路径部分中的条件:

SELECT 
  STUFF((
    SELECT  ' « ' + [Name] 
    FROM [DB].[dbo].[Categories] C 
    WHERE C.ID = node.ID -- a criteria here is needed to get correct rows
  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 足以识别正确的行。

关于mysql - 如何使用 GROUP_CONCAT 将 MySQL 查询正确转换为 MSSQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30678389/

相关文章:

MySQL:当列 "foo"早于 2015-01-01 时更新列 "job_date"

java - 在 Java 中更新单行数据库

sql-server - 包部署错误 - 将连接字符串更改为 SQLNCLI10 或查找并安装对 SQLNCLI.1 的支持?

sql - 无法使用实例名称连接到 SQL Server

sql-server - 如何从命令行更新 SSDT 项目?

php - 是否可以一次将多个数据添加到一列中?

mysql - 学说表副本

c# - 发送一些数据到服务器并获取它

mysql - 帮助 SQL 连接结合大量子查询

php - 未获取数据