首先我需要查一级分类。需要判断一级分类下有没有商品。但是一级分类不能直接查。因为有二级分类。二级分类与一级分类处于一个表。有一个字段parent_id表示他们的关系。一级分类此字段为空。二级分类此字段有一级分类的id。需要用sql判断一级分类下有没有商品。有输出一级分类没有不输出,商品表中都是关联的二级分类。这sql怎么写,求大佬告知,感谢
这是表的现有数据:
通过sql查询结果:
sql:
select yi.*
from(select distinct parent_id pid from products a where a.`parent_id`>0) er
left join products yi on er.pid=yi.`id`;
先通过查询表中parent_id不为空的(表中parnet_id字段类型设置的整型同id,所以直接用>0判断了),然后使用distinct查重,获取对应的parent_id,再去关联该表查询出结果即可。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2019-03-19
select SegmentId,SegmentId,ProjectType , sum(col) from
(
select SegmentId,SegmentId,ProjectType........from a,b,c,d where...........
) t
group by SegmentId,SegmentId,ProjectType
with rollup
意思是将要统计的字段合成一个为子表,然后对这个字表进行group by!本回答被网友采纳
(
select SegmentId,SegmentId,ProjectType........from a,b,c,d where...........
) t
group by SegmentId,SegmentId,ProjectType
with rollup
意思是将要统计的字段合成一个为子表,然后对这个字表进行group by!本回答被网友采纳
第2个回答 2019-03-19
--用的时候把vagetabel 这个表换成你自己的就行了、
declare @name nvarchar(200)
select @name='苹果'--输入品名
;
WITH getname
AS
(
SELECT a.id,a.parentid,A.name,0 as lvl,case when a.parentid is null then CONVERT(NVARCHAR(200),'无上级') else CONVERT(NVARCHAR(200),a.parentid) end AS PNAME FROM [vagetabel] a
WHERE a.name = @name
UNION ALL
SELECT CTE.id,CTE.parentid,cte.name,lvl+1 as lvl,CONVERT(NVARCHAR(200),ca.NAME+'/'+cte.name+'/') as pname FROM getname Ca
INNER JOIN [vagetabel] CTE ON CTE.id=ca.parentid
)
select 菜单级别=(SELECT ''+name +'/' from getname for XML path (''))
declare @name nvarchar(200)
select @name='苹果'--输入品名
;
WITH getname
AS
(
SELECT a.id,a.parentid,A.name,0 as lvl,case when a.parentid is null then CONVERT(NVARCHAR(200),'无上级') else CONVERT(NVARCHAR(200),a.parentid) end AS PNAME FROM [vagetabel] a
WHERE a.name = @name
UNION ALL
SELECT CTE.id,CTE.parentid,cte.name,lvl+1 as lvl,CONVERT(NVARCHAR(200),ca.NAME+'/'+cte.name+'/') as pname FROM getname Ca
INNER JOIN [vagetabel] CTE ON CTE.id=ca.parentid
)
select 菜单级别=(SELECT ''+name +'/' from getname for XML path (''))