产品分类表,大类名称和小类名称放在同一张表里目的:在或许小类名称的同时获取相对应的大类名称如:
ID         大类名           小类名
1       电子及家电类      电子电气产品求SQL语句如何写
表名Calling 如下:
ID     layer     DlId           Name
1        2        3          电子电气产品
2        2        3          电子消费品
3        1        0          电子及家电类select id,(select name from calling where calling=Calling.Dl)as DlName,Name from [Calling]问题就出在红色部分,请教应该如何写才能正确获取。谢谢!

解决方案 »

  1.   

    -- Test Data: Calling
    If object_id('Calling') is not null 
        Drop table Calling
    Go
    Create table Calling(ID int,layer int,DlId int,Name varchar(16))
    Go
    Insert into Calling
    select 1,2,3,'电子电气产品' union all
    select 2,2,3,'电子消费品' union all
    select 3,1,0,'电子及家电类' 
    Go
    --Start
    select id,(select top 1 name from calling where a.DlId=id)as DlName,Name from [Calling] a--Result:
    /*
    id          DlName           Name             
    ----------- ---------------- ---------------- 
    1           电子及家电类           电子电气产品
    2           电子及家电类           电子消费品
    3           NULL             电子及家电类(所影响的行数为 3 行)*/
    --End 
      

  2.   

    只查calling表查不出来吧
    如果大类名,小类名在一个表(A)里可以关联查询
    select id ,a.大类名,name from clalling join a on a.小类名=calling.name 
      

  3.   

    or
    select d.id, DlName=p.name, d.Name
    from calling d
    join calling p on p.id=d.dlid