日期:2014-05-18  浏览次数:20685 次

SQL 两表联查,有表A表B,有相同的列:姓名,电话,当电话相同而姓名不同时,姓名=A姓名+B姓名,电话不相同时,姓名=原姓名,想在原表中改变,求语句,谢谢。
表述可能不太清楚,以下面的两个表为例。
A表
姓名 电话
张三 5566742
李四 13088889999
赵五 13877776666
鬼子六 3322152

B表
石头 5566742
麻子 13088889999
赵五 13877776666
泡泡 13900002222

想达成的新的A表(首选在原表中改变,若不能,则生成新表)
张三+石头 5566742
李四+麻子 13088889999
赵五 13877776666
鬼子六 3322152
泡泡 13900002222

(说明:
1新表中的第1个和第2个电话,A表和B表都有,但名字不同,新表中用+连续A表和B表和名字。
2新表中的第3个电话,A表B表都有,且名字相同,新表中沿用以前的名字。
3新表中的第4个电话,仅只出现在A表,名字和电话就用A表中的。
4新表中的第5个电话,仅只出现在B表,名字和电话就用B表中的。
5+号,只是一个连接符号,若不可用,则用-或别的称号代替。谢谢!)


------解决方案--------------------
update a set 姓名=姓名+isnull(select ','+姓名 from B表 where 电话=a.电话 for xml path(''),'')
from A表 a

insert into A表
 select * from B表 a where not exists(select 1 from A表 where 电话=a.电话)
------解决方案--------------------
探讨

SQL code

CREATE TABLE tba
(
name VARCHAR(10),
phone VARCHAR(100)
)
GO
CREATE TABLE tbb
(
name VARCHAR(10),
phone VARCHAR(100)
)
GO
INSERT INTO tba
SELECT '张三', '5566742' UNION
SELEC……