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

难题1,关于同一个表中的查询/插入有关问题

2012-01-14 
难题1,关于同一个表中的查询/插入问题!表T1如下:IDNameCID1CID201Zhao0102Qian0103Sun0404Li02要求查询插

难题1,关于同一个表中的查询/插入问题!
表T1如下:

ID         Name         CID1         CID2        
01         Zhao         01
02         Qian         01
03         Sun           04
04         Li             02

要求查询插入的效果是:   如果某一行A的CID1的值和其他某行B的ID的值相同,那么就把B的Name插入到A的CID2列中:结果应该如下所示:

ID         Name         CID1         CID2        
01         Zhao         01
02         Qian         01             Zhao
03         Sun           04             Li
04         Li             02             Qian


不知道怎么写好,请大侠执教!
SELECT   *   FROM   T1
WHERE   ...



[解决办法]
--如果是要查詢
Select
A.ID,
A.Name,
A.CID1,
(Case When A.ID = A.CID1 Then A.CID2 Else IsNull(B.Name, ' ') End) As CID2
From
T1 A
Left Join
T1 B
On A.CID1 = B.ID
--如果是要更新
Update
A
Set
CID2 = (Case When A.ID = A.CID1 Then A.CID2 Else IsNull(B.Name, ' ') End)
From
T1 A
Left Join
T1 B
On A.CID1 = B.ID

Select * From T1
[解决办法]
Create Table T1
(IDChar(2),
NameVarchar(10),
CID1Char(2),
CID2Varchar(10))
Insert T1 Select '01 ', 'Zhao ', '01 ', ' '
Union All Select '02 ', 'Qian ', '01 ', ' '
Union All Select '03 ', 'Sun ', '04 ', ' '
Union All Select '04 ', 'Li ', '02 ', ' '
Union All Select '05 ', 'Li ', '06 ', ' '
GO
--如果是要查詢
Select
A.ID,
A.Name,
A.CID1,
(Case When A.ID = A.CID1 Then A.CID2 Else IsNull(B.Name, ' ') End) As CID2
From
T1 A
Left Join
T1 B
On A.CID1 = B.ID
--如果是要更新
Update
A
Set
CID2 = (Case When A.ID = A.CID1 Then A.CID2 Else IsNull(B.Name, ' ') End)
From
T1 A
Left Join
T1 B
On A.CID1 = B.ID

Select * From T1
GO
Drop Table T1
--Result
/*
IDNameCID1CID2
01Zhao01
02Qian01Zhao
03Sun04Li
04Li02Qian
05Li06
*/

[解决办法]
if object_id( 'pubs..t1 ') is not null
drop table t1
go
create table t1(ID varchar(10),Name varchar(10),CID1 varchar(10),CID2 varchar(10))
insert into t1(ID,Name,CID1,CID2) values( '01 ', 'Zhao ', '01 ', ' ')
insert into t1(ID,Name,CID1,CID2) values( '02 ', 'Qian ', '01 ', ' ')
insert into t1(ID,Name,CID1,CID2) values( '03 ', 'Sun ' , '04 ', ' ')
insert into t1(ID,Name,CID1,CID2) values( '04 ', 'Li ' , '02 ', ' ')


go

update t1
set cid2 = t2.name
from t1,(select * from t1) t2
where t1.cid1 = t2.id and t1.id <> t2.id

select * from t1

drop table t1

/*
ID Name CID1 CID2
---------- ---------- ---------- ----------
01 Zhao 01
02 Qian 01 Zhao
03 Sun 04 Li
04 Li 02 Qian

(所影响的行数为 4 行)
*/
[解决办法]
如果你的實際情況和你舉的例子一樣,只是數據量上有差異,用

Update
A
Set
CID2 = (Case When A.ID = A.CID1 Then A.CID2 Else IsNull(B.Name, ' ') End)
From
T1 A
Left Join
T1 B
On A.CID1 = B.ID

這個更新沒有問題

热点排行