需要帮助将下面的 SQL 查询转换为 MySQL 而无需交叉应用方法
Need help to convert the below SQL query to MySQL without cross apply method
需要在 MySQL -
上提取以下查询
select ut.ID, aa.Name, ut.Parent, aa.Geneology,
convert(int,(len(aa.Geneology)-len(Replace(aa.Geneology,',','')))-1) 'Level'
from (select u.id, x.Name, x.Geneology
from userDT u cross apply
(select n.Geneology,n.Name
from userDT n
Where n.Geneology like '%' + u.Geneology + '%'
) x
where u.id=3
) aa left join
userDT ut
on ut.Geneology = aa.Geneology";
UserDT Table -
id Name Parent Geneology
1 abc - 1,
2 def abc 1,2
3 ghi abc 1,3
4 jkl def 1,2,4
5 mno ghi 1,3,5
6 pqr def 1,2,6
7 stu ghi 1,3,7
8 vwx mno 1,3,5,8
9 xyz vwx 1,3,5,8,9
结果应该是这样的 -
ID Name Parent Geneology Level
3 ghi abc 1,3 0
5 mno ghi 1,3,5 1
7 stu ghi 1,3,7 1
8 vwx mno 1,3,5,8 2
9 xyz vwx 1,3,5,8,9 3
您可以将其转换为 join
。在 MySQL 语法中,我认为查询看起来像:
select ut.ID, aa.Name, ut.Parent, aa.Geneology,
(len(aa.Geneology)-len(Replace(aa.Geneology, ',', '')))-1 as Level
from (select u.id, x.Name, x.Geneology
from userDT u join
userDT x
on x.Geneology like concat('%', u.Geneology, '%') ) x
where u.id = 3
) aa left join
userDT ut
on ut.Geneology = aa.Geneology;
坦率地说,我认为它在 MySQL 或 SQL 服务器中都没有多大用处。您可能想问另一个问题,其中包含示例数据、所需结果以及对您要实现的逻辑的解释。
需要在 MySQL -
上提取以下查询select ut.ID, aa.Name, ut.Parent, aa.Geneology,
convert(int,(len(aa.Geneology)-len(Replace(aa.Geneology,',','')))-1) 'Level'
from (select u.id, x.Name, x.Geneology
from userDT u cross apply
(select n.Geneology,n.Name
from userDT n
Where n.Geneology like '%' + u.Geneology + '%'
) x
where u.id=3
) aa left join
userDT ut
on ut.Geneology = aa.Geneology";
UserDT Table -
id Name Parent Geneology
1 abc - 1,
2 def abc 1,2
3 ghi abc 1,3
4 jkl def 1,2,4
5 mno ghi 1,3,5
6 pqr def 1,2,6
7 stu ghi 1,3,7
8 vwx mno 1,3,5,8
9 xyz vwx 1,3,5,8,9
结果应该是这样的 -
ID Name Parent Geneology Level
3 ghi abc 1,3 0
5 mno ghi 1,3,5 1
7 stu ghi 1,3,7 1
8 vwx mno 1,3,5,8 2
9 xyz vwx 1,3,5,8,9 3
您可以将其转换为 join
。在 MySQL 语法中,我认为查询看起来像:
select ut.ID, aa.Name, ut.Parent, aa.Geneology,
(len(aa.Geneology)-len(Replace(aa.Geneology, ',', '')))-1 as Level
from (select u.id, x.Name, x.Geneology
from userDT u join
userDT x
on x.Geneology like concat('%', u.Geneology, '%') ) x
where u.id = 3
) aa left join
userDT ut
on ut.Geneology = aa.Geneology;
坦率地说,我认为它在 MySQL 或 SQL 服务器中都没有多大用处。您可能想问另一个问题,其中包含示例数据、所需结果以及对您要实现的逻辑的解释。