CREATE TABLE `TEST` (
`tb` VARCHAR(50) ,
`chan` INT ,
`chanone` INT ,
`chantwo` INT ,
`class` INT ,
`name` VARCHAR (100)
); 
INSERT INTO TEST VALUES('13511' , 135,      1  ,       1 ,    1  ,   '中国');
INSERT INTO TEST VALUES('13522',  135 ,     2     ,    2  ,   2  ,   '浙江');
INSERT INTO TEST VALUES('13523',  135 ,     2   ,      3  ,   2 ,    '湖南');
INSERT INTO TEST VALUES('13542',  135  ,    4  ,       2  ,   3 ,    '杭州');
INSERT INTO TEST VALUES('13543' , 135  ,    4      ,   3   ,  3 ,    '长沙');
INSERT INTO TEST VALUES('13611',  136 ,     1  ,       1 ,    1 ,    '美国');
INSERT INTO TEST VALUES('13622',  136  ,    2 ,        2,     2 ,    '加州1');
INSERT INTO TEST VALUES('13623',  136  ,    2  ,       3   ,  2  ,   '加州2');
INSERT INTO TEST VALUES('13644',  136  ,    4   ,      4  ,   3 ,    '老加');
INSERT INTO TEST VALUES('13645',  136    ,  4   ,     5  ,   3   ,  '小加');
数据:
tb    chan   chanone  chantwo   class   nm 
13511  135      1         1     1     中国
13522  135      2         2     2     浙江
13523  135      2         3     2     湖南
13542  135      4         2     3     杭州
13543  135      4         3     3     长沙
13611  136      1         1     1     美国
13622  136      2         2     2     加州1
13623  136      2         3     2     加州2
13644  136      4         4     3     老加
13645  136      4         5     3     小加
根据同一chan下的class的级别来显示结果的,tb是唯一的,但是不是主键。tb是chan和chanone  chantwo三个字段的结合。
class 1     中国
class 2     中国-湖南
class 3     中国-湖南-长沙要求显示的结果: 
tb    chan   chanone  chantwo   class   nm 
13511  135      1         1     1     中国
13522  135      2         2     2     中国-浙江
13523  135      2         3     2     中国-湖南
13542  135      4         2     3     中国-浙江-杭州
13543  135      4         3     3     中国-湖南-长沙
13611  136      1         1     1     美国
13622  136      2         2     2     美国-加州1
13623  136      2         3     2     美国-加州2
13642  136      4         2     3     美国-加州1-老加
13643  136      4         3     3     美国-加州2-小加

解决方案 »

  1.   

    MYSQL不支持递归查询,用SP来解决
      

  2.   

    http://hi.baidu.com/affections/blog/item/b393bfec01711b5378f055ff.html
      

  3.   

    select a.tb,a.chan,a.chanone,a.chantwo,a.class,case a.chan when b.chan then concat(b.name,a.name) else a.name end  from test a left join (
    select chan,name from test group by chan)b
    on a.chan=b.chan这是参照例子
    多元化只需要多个归来即可。
      

  4.   

    D:\eclipses\eclipse.exe -data D:\icp
      

  5.   

    D:\eclipses\eclipse.exe -data D:\icp
      

  6.   

    select *, 
    case class 
    when 1 then name 
    when 2 then (select concat(name,'-',a.name) from test where chan=a.chan and class=1)
    when 3 then (select concat(b.name,'-',c.name,'-',a.name)  from test b,test c where b.chan=c.chan and b.class=1 and c.class=2 and c.chan=a.chan and c.chantwo=a.chantwo)
    end as cname
    from test a