建立城市属性表
城市名称,城市属性属性编码表
属性编码,属性说明按属性分类:
select 城市名称 from 城市属性表 A left join 属性编码表 B on A.城市属性 = B.属性编码
where B.属性说明 = '首都'愉快的登山者       ⊙
◢◣◢◣◢◣

解决方案 »

  1.   

    TO:myflok(阿棋) 
      你的方法无法解决以后增加不确定的分类
    TO:tj_dns(愉快的登山者) 
      你所说的实际是我列出的第二种方法,如果有大量的数据时,那么这个“城市属性表”会变得十分的大,并且重复存储数据元不知道各位还有什么好的方法没有!!!
      

  2.   

    TO:treeforest(森林) 
    你没有了解我的意图,
    我是指分类是不确定的,以后可能会增加新的分类,同时一个城市可能归入多个类别之中
      

  3.   

    up-----tj_dns(愉快的登山者) 
      

  4.   

    用第二种方法,并
    让城市的属性可多选,即城市属性表:类别   代码
    首都   A
    港口   B
    中国   C
    开放      D
    城市信息表:城市      属性     ...          ...
    北京      ACD       ...          ...
    上海      BCD       ...          ...
    合肥      C        ...          ...
      

  5.   

    TO:eminena(大力蚂蚁) 
    按你的方法存在两个问题:
    1.当新加了分类以后,需要去更新表中所有相关记录的属性列,这个操作显得多余
    2.假设要找出所有属性为港口B的城市,需要对表的属性进行字符串比较操作
    当数据量比较大,尤其库不在本地时,我觉得性能是个问题
      

  6.   

    create table 分类表(类别 varchar(10),城市 varchar(10))
    insert 分类表 values('首都','北京')
    insert 分类表 values('首都','巴黎')
    insert 分类表 values('首都','莫斯科')
    insert 分类表 values('首都','东京')
    insert 分类表 values('港口','上海')
    insert 分类表 values('港口','香港')
    insert 分类表 values('中国','上海')
    insert 分类表 values('中国','北京')
    insert 分类表 values('中国','香港')
    gocreate function getstr(@类别 varchar(10))
    returns varchar(8000)
    as 
    begin
    declare @str varchar(8000)
    set @str=''
    select @str=@str+','+rtrim(城市) from 分类表 where 类别=@类别
    select @str=right(@str,len(@str)-1) where @str<>''
    return @str
    end
    go--调用:
    select 类别,dbo.getstr(类别) 城市列表 from 你的表 group by 类别