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 行受影响)
*/