gpt4 book ai didi

mysql - 如何将 "WITH"子句 MS SQL 转换为 MySQL

转载 作者:行者123 更新时间:2023-11-30 23:00:17 25 4
gpt4 key购买 nike

我试过这样显示产品类别;

Table Name: PSCategories

PSId | PSName | ParentId(FK to PSCategories(PSId) )
1 | test1 | NULL
2 | test2 | 1
3 | test3 | NULL
4 | test4 | 3
5 | test5 | 4

这个表数据我要这样过滤

PSId     | PSName                  | ParentId
1 | test1 | 0
2 | test1 > test2 | 1
3 | test3 | 0
4 | test3 > test4 | 3
5 | test3 > test4 > test5 | 4

这个mssql查询可以,但是怎么转成mysql

WITH categories (PSId, PSName, ParentId)
AS (SELECT PSId, CAST(PSName AS VARCHAR(255)), 0
FROM PSCategories AS pm
WHERE pm.ParentId IS NULL
UNION ALL
SELECT ps.PSId, CAST(m.PSName + ' > ' + ps.PSName AS VARCHAR(255)), m.PSId
FROM PSCategories AS ps
JOIN categories AS m
ON m.PSId = ps.ParentId
WHERE ps.ParentId IS NOT NULL
)
SELECT * FROM categories
ORDER BY PSId

最佳答案

你不能,MySQL 不支持递归(也不支持 CTE)。

很抱歉成为坏消息的传播者,但 something_UID、something_parent_UID 模式几乎总是反模式。

闭包表比递归更好(而且查询更简单、更快)。

因此,您应该将层次结构信息存储在闭包表中。看这里: http://dirtsimple.org/2010/11/simplest-way-to-do-tree-based-queries.html和这里: http://www.mysqlperformanceblog.com/2011/02/14/moving-subtrees-in-closure-table/

闭包表还有一个优点,它适用于不支持 CTE 和递归的 MySQL。

关于mysql - 如何将 "WITH"子句 MS SQL 转换为 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24384385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com