SELECT BigClassID,Name
FROM Sp_ClassBig
where Sp_ClassBig.UpGradeID=0SELECT BigClassID,Name
FROM Sp_ClassBig
where Sp_ClassBig.UpGradeID>0这两个查询怎么建立关系查询?怎么让两个查询有主从关系?
FROM Sp_ClassBig
where Sp_ClassBig.UpGradeID=0SELECT BigClassID,Name
FROM Sp_ClassBig
where Sp_ClassBig.UpGradeID>0这两个查询怎么建立关系查询?怎么让两个查询有主从关系?
(
BigClassID int,
Name varchar(10),
UpGradeID int
);INSERT INTO @t
SELECT 1,'食品干货', 0 UNION ALL
SELECT 2,'日用', 0 UNION ALL
SELECT 3,'休闲食品', 1 UNION ALL
SELECT 4,'饮料', 1 UNION ALL
SELECT 5,'烟', 1 UNION ALL
SELECT 6,'酒水', 1 UNION ALL
SELECT 7,'健康美容', 2 UNION ALL
SELECT 8,'纸制用品', 2 UNION ALL
SELECT 9,'饼干', 1 UNION ALL
SELECT 10,'清洁用品', 2
--准备数据;WITH c_distinct AS
(
SELECT *
FROM @t
WHERE UpGradeID = 0
)
SELECT ParentName = a.Name,
ChildName = t2.Name
FROM
(
SELECT *
FROM c_distinct) a
CROSS APPLY
(
SELECT t.Name
FROM @t t
WHERE t.UpGradeID = a.BigClassID) t2
测试结果:
ParentName ChildName
---------- ----------
食品干货 休闲食品
食品干货 饮料
食品干货 烟
食品干货 酒水
食品干货 饼干
日用 健康美容
日用 纸制用品
日用 清洁用品(8 row(s) affected)你是否想要递归查询,类似这样?
有简便一点的吗?像INNER JOIN那样就带有关系
对了,如果用户要增加类,那INSERT INTO @t 这个不是要改了吗?
INSERT INTO @t
select * 这样行吗?
我这里写的@t是模拟你第一张帖子出贴出来的数据表中的数据,你可以直接用数据库中的真实表名替换到@t的位置,
;WITH c_distinct AS
( SELECT * FROM @t WHERE UpGradeID = 0)
SELECT ParentName = a.Name, ChildName = t2.Name
FROM( SELECT * FROM c_distinct) a
CROSS APPLY( SELECT t.Name FROM @t t WHERE t.UpGradeID = a.BigClassID) t2把这段中@t变量换成你的表名应该就是了
把test换成你要的表名即可