首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

两张表合成的有关问题

2012-12-17 
两张表合成的问题A表名称安徽江淮汽车集团有限公司广东健力宝集团有限公司海尔集团公司国家电网B表名称海

两张表合成的问题

A表

   名称
   安徽江淮汽车集团有限公司
   广东健力宝集团有限公司
   海尔集团公司
   国家电网

B表
  名称 
  海尔集团
  健力宝
  加多宝
  哈药集团有限公司
  北京同仁堂
  国家电网公司

需合成C表
   安徽江淮汽车集团有限公司
   广东健力宝集团有限公司
   海尔集团公司
   加多宝
  哈药集团有限公司
  北京同仁堂
  国家电网公司

就是A表根据关键字去除B表里面的
B表根据关键字去除A表里面的 得到了C表。 用like好像不行



[最优解释]
select * into #tb from A
union all
select * from B

delete a from #tb a 
  where exists(select 1 from #tb where 名称 like '%'+a.名称+'%' and len(名称)>len(a.名称)) 

select * from #tb
[其他解释]

select * 
from 
a inner join b on a.主键=b.主键
inner join c on b.主键=c.主键

[其他解释]
select 名称 
from TBA a 
where not exists(select 1 from TBB where 名称 like '%'+a.名称+'%')
union all
select 名称 
from TBB b 
where not exists(select 1 from TBA where 名称 like '%'+b.名称+'%')

[其他解释]
引用:
SQL code?



1234567

select 名称  from TBA a  where not exists(select 1 from TBB where 名称 like '%'+a.名称+'%') union allselect 名称  from TBB b  where not exists(select 1 from TBA where 名称 like '%'+b……

+1
[其他解释]

if OBJECT_ID('tb1') is not null
drop table tb1
if OBJECT_ID('tb2') is not null
drop table tb2
go
create table tb1(name varchar(40))
create table tb2(name varchar(40))
insert into tb1
values( '安徽江淮汽车集团有限公司'),
('广东健力宝集团有限公司'),
  ('海尔集团公司'),
   ('国家电网')
insert into tb2
select  '海尔集团'  union all 
select  '健力宝' union all
select  '加多宝' union all
select  '哈药集团有限公司' union all
select    '北京同仁堂' union all
select  '国家电网公司'

;with sel as
(select name from tb1 union  all 
select name from tb2)
select distinct name from sel except(select a.name from tb1 a,tb2 b
where CHARINDEX(a.name,b.name)>0 union all
select b.name from tb1 a,tb2 b
where CHARINDEX(b.name,a.name)>0 )

/*
name
----------------------------------------
安徽江淮汽车集团有限公司
北京同仁堂
广东健力宝集团有限公司
国家电网公司
哈药集团有限公司


海尔集团公司
加多宝

(7 row(s) affected)
*/


[其他解释]
引用:
SQL code?



1234

select *  from a inner join b on a.主键=b.主键 inner join c on b.主键=c.主键

额,我看错意思了!下面有答案了 
[其他解释]
select isnull(a.myname,b.myname) as myname from dbo.TBAA as a full join dbo.TBAb as b on a.myname=b.myname

[其他解释]
----------------------------
-- Author  :TravyLee(物是人非事事休,欲语泪先流!)
-- Date    :2012-11-21 14:32:35
-- Version:
--      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
--Jul  9 2008 14:43:34 
--Copyright (c) 1988-2008 Microsoft Corporation
--Developer Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------
--> 测试数据:[A表]
if object_id('[A表]') is not null drop table [A表]
go 
create table [A表]([名称] varchar(24))
insert [A表]
select '安徽江淮汽车集团有限公司' union all
select '广东健力宝集团有限公司' union all
select '海尔集团公司' union all
select '国家电网'
--> 测试数据:[B表]
if object_id('[B表]') is not null drop table [B表]
go 
create table [B表]([名称] varchar(16))
insert [B表]
select '海尔集团' union all
select '健力宝' union all
select '加多宝' union all
select '哈药集团有限公司' union all
select '北京同仁堂' union all
select '国家电网公司'
go


;with t
as(
select 
isnull(a.名称,b.名称) as 名称A,
isnull(b.名称,a.名称) as 名称B
from 
[A表] a
full join
[B表] b
on
charindex(a.名称,b.名称)>0 or charindex(b.名称,a.名称)>0
)
select
case when len(名称A)>=len(名称B) then 名称A else 名称B end as 名称
from t

/*
名称
------------------------
安徽江淮汽车集团有限公司
广东健力宝集团有限公司
海尔集团公司
国家电网公司
加多宝
哈药集团有限公司
北京同仁堂

(7 行受影响)


*/

[其他解释]
借用5楼的表结构

--BEGIN 创建表结构并插入数据 
if OBJECT_ID('tb1') is not null drop table tb1 
if OBJECT_ID('tb2') is not null drop table tb2 
go 
create table tb1(name varchar(40)) 
create table tb2(name varchar(40)) 
insert into tb1 
values( '安徽江淮汽车集团有限公司'), ('广东健力宝集团有限公司'), ('海尔集团公司'),('国家电网') 
insert into tb2 
select  '海尔集团'  union all 
select  '健力宝' union all
select  '加多宝' union all
select  '哈药集团有限公司' union all
select    '北京同仁堂' union all


select  '国家电网公司'
--END 
SELECT * FROM tb1 AS t1
SELECT * FROM tb2 AS t2
---输出结果
SELECT  CASE WHEN LEN(isnull(t1.name,''))>LEN(isnull(t2.name,'')) THEN t1.name 
ELSE t2.name END AS Name
FROM tb1 t1
FULL JOIN tb2 t2 ON (CHARINDEX(t1.name,t2.name)>0 OR CHARINDEX(t2.name,t1.name)>0)


[其他解释]
create table someGroup1
(
id int primary key,
groupName varchar(50)
)

insert into someGroup1 values(1,'安徽江淮汽车集团有限公司')
insert into someGroup1 values(2,'广东健力宝集团有限公司')
insert into someGroup1 values(3,'海尔集团公司')
insert into someGroup1 values(4,'国家电网')
insert into someGroup1 values(5,'哈药集团')

create table someGroup2
(
id int primary key,
groupName varchar(50)
)
insert into someGroup2 values(1,'海尔集团')
insert into someGroup2 values(2,'健力宝')
insert into someGroup2 values(3,'加多宝')
insert into someGroup2 values(4,'哈药集团有限公司')
insert into someGroup2 values(5,'北京同仁堂')
insert into someGroup2 values(6,'国家电网公司')
select * from someGroup1
select * from someGroup2



--得到表一中名称非
--     国家电网
--     哈药集团 的公司名称并写入新表tb1

select distinct s1.groupName into tb1 from someGroup1 as s1,someGroup2 as s2
where
CHARINDEX(s2.groupName,s1.groupName) = 0 and s1.groupName 
not in(
--得到 国家电网
--     哈药集团
select s1.groupName from someGroup1 as s1,someGroup2 as s2
where CHARINDEX(s1.groupName,s2.groupName) >= 1 )
--得到表一中名称非
--     健力宝
--     海尔集团 的公司名称并写入新表tb2
select distinct s2.groupName into tb2 from someGroup2 as s2
where s2.groupName not in
(
--得到  健力宝
--得到  海尔集团
  select s2.groupName from someGroup1 as s1,someGroup2 as s2
  where CHARINDEX(s2.groupName,s1.groupName) >=1
)
select groupName from tb1 
union all
select groupName from tb2

热点排行