读书人

sql 剔除

发布时间: 2013-06-19 10:26:41 作者: rapoo

sql 删除
两个表
表a 表b
地址 类别 分类 情况 地址 类别 分类 结果
西关 1 A 迁出 西关 1 A 是
西关 2 B 迁入 西关 2 B 是
东关 1 A 迁出 东关 1 A 否
东关 2 B 迁入 东关 2 B 是
东关 3 C 迁入 东关 3 C 是
南关 1 A 迁出 南关 1 A 是
南关 2 B 迁入 南关 2 B 是
南关 4 C 迁出 南关 4 C 是

实现
表a 地址 = 表b 地址
表a 类别 = 表b 类别
表a 分类 = 表b 分类
当 表b 结果 = 是 并且 表a 情况 = 迁出 时 删除表B中的
下面3条记录
西关 1 A 是
南关 4 C 是
南关 1 A 是
[解决办法]

----------------------------
-- Author :DBA_Huangzj()
-- Date :2013-05-11 23:00:50
-- Version:
-- Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86)
--Jun 17 2011 00:57:23
--Copyright (c) Microsoft Corporation
--Enterprise 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(4),[类别] int,[分类] varchar(1),[情况] varchar(4))
insert [a]
select '西关',1,'A','迁出' union all
select '西关',2,'B','迁入' union all
select '东关',1,'A','迁出' union all
select '东关',2,'B','迁入' union all
select '东关',3,'C','迁入' union all
select '南关',1,'A','迁出' union all
select '南关',2,'B','迁入' union all
select '南关',4,'C','迁出'

--> 测试数据:[b]
if object_id('[b]') is not null drop table [b]
go
create table [b]([地址] varchar(4),[类别] int,[分类] varchar(1),[结果] varchar(2))
insert [b]
select '西关',1,'A','是' union all
select '西关',2,'B','是' union all
select '东关',1,'A','否' union all
select '东关',2,'B','是' union all
select '东关',3,'C','是' union all
select '南关',1,'A','是' union all
select '南关',2,'B','是' union all
select '南关',4,'C','是'
--------------开始查询--------------------------
select * from [b]

DELETE b
FROM b
INNER JOIN a ON a.地址 = b.地址
AND a.类别 = b.类别
AND a.分类 = b.分类
WHERE b.结果 = '是'
AND a.情况 = '迁出'
----------------结果----------------------------



select * from [b]
/*

(8 行受影响)

(8 行受影响)
地址 类别 分类 结果
---- ----------- ---- ----
西关 1 A 是
西关 2 B 是
东关 1 A 否
东关 2 B 是
东关 3 C 是
南关 1 A 是
南关 2 B 是
南关 4 C 是

(8 行受影响)

(3 行受影响)

地址 类别 分类 结果
---- ----------- ---- ----
西关 2 B 是
东关 1 A 否
东关 2 B 是


东关 3 C 是
南关 2 B 是

(5 行受影响)


*/

读书人网 >SQL Server

热点推荐