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

|M| 两个表操作 大家看看SQL要怎么写
队表
ID     队名     人数
1       A队       3
2       B队       1
队员表
ID     队名     性别   姓名
1       A队       男       小王
2       A队       女       小红
3       A队       男       小李
3       B队       男       小张  

现在要删除B表中性别为男的队员再更新队表中的为数

谢谢

------解决方案--------------------
--我晕,忘了些删除条件,Sorry:

update a set a.人数 = a.人数 - b.人数 from
队表 a,
(select 队名, 人数 = count(*) from 队员表 where '性别 ' = '男 ' group by 队名) b
where a.队名 = b.队名

delete 队员表 where '性别 ' = '男 '

------解决方案--------------------
不懂!请教!
------解决方案--------------------
zyciis381() ( ) 信誉:100 2007-8-14 1:56:48 得分: 0



这上面是一条SQL吗
我想一次就OK
谢谢


---------------
這個是兩個動作,一條語句實現不了。

或者寫一條刪除語句,再在队员表上建立一個觸發器來更新队表。
------解决方案--------------------
----创建测试数据
declare @t1 table(ID int,队名 varchar(10),人数 int)
insert @t1
select 1, 'A队 ', 3 union all
select 2, 'B队 ', 1
declare @t2 table(ID int,队名 varchar(10),性别 varchar(5), 姓名 varchar(10))
insert @t2
select 1, 'A队 ', '男 ', '小王 ' union all
select 2, 'A队 ', '女 ', '小红 ' union all
select 3, 'A队 ', '男 ', '小李 ' union all
select 3, 'B队 ', '男 ', '小张 '

----删除B表
delete from @t2 where 性别 = '男 '
----更新A表
update a set 人数 = (select count(*) from @t2 where 队名 = a.队名 )
from @t1 as a
----如果只想更新A表而不删除B表
update a set 人数 = (select count(*) from @t2 where 队名 = a.队名 and 性别 <> '男 ' )
from @t1 as a

----查看A表
select * from @t1

/*结果
ID 队名 人数
----------- ---------- -----------
1 A队 1
2 B队 0
*/

------解决方案--------------------
----例子----
create table t1(ID int,队名 varchar(10),人数 int)
insert t1
select 1, 'A队 ', 3 union all
select 2, 'B队 ', 1
create table t2(ID int,队名 varchar(10),性别 varchar(5), 姓名 varchar(10))
insert t2
select 1, 'A队 ', '男 ', '小王 ' union all
select 2, 'A队 ', '女 ', '小红 ' union all
select 3, 'A队 ', '男 ', '小李 ' union all
select 3, 'B队 ', '男 ', '小张 '

go

---建个触发器,用来自动更新
create trigger t_auto on t2
for delete
as
begin
update a set 人数=(select count(*) from t2 where 队名 = a.队名 ) from t1 a
end

go


delete from t2 where 性别 = '男 '
select * from t1

drop table t1,t2


/* 结果
ID 队名 人数
----------- ---------- -----------
1 A队 1
2 B队 0
*/