id  name id_parent
1   美国 0
2   中国 0
3   浙江 2
4   上海 2
5   江苏 2
6   英国 0需要显示的结果是
1  美国
3  浙江
4  上海
5  江苏
6  英国就是去掉2 中国。 因为3,4,5都是2中国的子集。即有子集的话,父集就不显示,只显示子集。
请教这样一个sql语句该怎么写啊?????

解决方案 »

  1.   

    CREATE TABLE #T(
    Id INT,
    [name] NVARCHAR(50),
    id_Parent INT)INSERT INTO #T 
    SELECT 1,'美国',0 UNION
    SELECT 2,'中国',0 UNION
    SELECT 3,'浙江',2 UNION
    SELECT 4,'上海',2 UNION
    SELECT 5,'江苏',2 UNION
    SELECT 6,'英国',0 SELECT * FROM #T a WHERE NOT EXISTS(SELECT 1 FROM #T WHERE a.id = id_parent AND a.id != id)
      

  2.   

    select * 
    from tb a
    where not exists(select 1 from tb b where a.id=b.id_parent )
      

  3.   

    CREATE TABLE tb(
    Id INT,
    [name] NVARCHAR(50),
    id_Parent INT)INSERT INTO tb 
    SELECT 1,'美国',0 UNION
    SELECT 2,'中国',0 UNION
    SELECT 3,'浙江',2 UNION
    SELECT 4,'上海',2 UNION
    SELECT 5,'江苏',2 UNION
    SELECT 6,'英国',0 select id,name
    from tb a 
    where not exists(select 1 from tb b where a.id=b.id_parent ) 
    /*
    1 美国
    3 浙江
    4 上海
    5 江苏
    6 英国
    */