我现在有两个表bbc和cia;都有name(国家),region(地区),area,gdp,population的字段(二者完全一样);
但是两表里内容不完全一样,比如有的bbc有,有的cia有,而且有的两表同name但是其他不同
我现在想把两者的国家概况合并起来,去掉重复的部分(名字相同),应该如何做?
(1),
select * from bbc 
union
select * from cia
这样即使name相同,如果内容相同也会当成不同的,我应该如何把它当成一个(只要name相同),如何决定其他内容是cia表的内容还是bbc表的?
请各位高手指点!(所有的字段都必须显示)

解决方案 »

  1.   

    select isnull(a.name , b.name) name , 
           isnull(a.region , b.region) region,
           isnull(a.area , b.area) area,
           isnull(a.gdp , b.gdp) gdp,
           isnull(a.population , b.population) population
    from bbc a full join cia b
    on a.name = b.name
     
      

  2.   

    --如果是两表内容都要显示。
    select a.* , b.* from bbc a full join cia b on a.name = b.name --如果需要区别表名
    select a.name a_name,a.region a_region,a.area a_area,a.gdp a_gdp,a.population a_population,
           b.name b_name,b.region b_region,b.area b_area,b.gdp b_gdp,b.population b_population
    from bbc a full join cia b on a.name = b.name 
      

  3.   

    SELECT name,region,area,gdp,population,'B' AS OTHER FROM BBC UNION
    SELECT name,region,area,gdp,population,'A' AS OTHER FROM CIA 
    WHERE NAME NOT IN (SELECT name FROM BBC )
    UNION SELECT name,region,area,gdp,population,'A' AS OTHER FROM CIA 
    WHERE NAME IN (SELECT name FROM BBC )说明:当有两个name相同,则观察字段 other 的值,若字段 other 的值为 B,则是 bbc 表的,若字段 other 的值为 A 则是CIA表的.
      

  4.   


    select a.* , b.* from bbc a full join cia b on a.name = b.name