|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
*/