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

sql 剔除

2013-06-19 
sql 删除两个表 表a表b地址 类别分类情况地址 类别分类结果西关1A迁出西关1A是西关2B迁入西关2B是东关1A迁

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


*/

热点排行