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

怎么查询表A中的字段a和字段b的值在表B中不存在

2013-04-12 
如何查询表A中的字段a和字段b的值在表B中不存在如何查询表A中的字段ID和字段Name的值在表B中不存在如下:A

如何查询表A中的字段a和字段b的值在表B中不存在
如何查询表A中的字段ID和字段Name的值在表B中不存在
如下:
A表结构
ID      Name     Levels   Flag
1001    Test       0       0
1001    Gust       0       0
1001    Gust       1       1
1002    Admin     0       0
1003    Test       0       0
1004    Test       0       0
1005    Gust       0       0
1006    Gust       1       1
1007    Admin     0       0
1008    Test       0       0

B表结构
ID      Name     SavePlace   sort
1001    Test     仓库          测试
1002    Test     仓库          测试



[解决办法]


SELECT A.* FROM A 
WHERE NOT EXISTS(
   SELECT 1 FROM B  WHERE B.ID=A.ID AND B.NAME=A.NAME
)


[解决办法]
----------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-04-09 17:24:13
-- Version:
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
--Jun 17 2011 00:54:03 
--Copyright (c) Microsoft Corporation
--Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721)
--
----------------------------
--> 测试数据:[A]
if object_id('[A]') is not null drop table [A]
go 
create table [A]([ID] int,[Name] varchar(5),[Levels] int,[Flag] int)
insert [A]
select 1001,'Test',0,0 union all
select 1001,'Gust',0,0 union all
select 1001,'Gust',1,1 union all
select 1002,'Admin',0,0 union all
select 1003,'Test',0,0 union all
select 1004,'Test',0,0 union all
select 1005,'Gust',0,0 union all
select 1006,'Gust',1,1 union all
select 1007,'Admin',0,0 union all
select 1008,'Test',0,0

--> 测试数据:[B]
if object_id('[B]') is not null drop table [B]
go 
create table [B]([ID] int,[Name] varchar(4),[SavePlace] varchar(4),[sort] varchar(4))


insert [B]
select 1001,'Test','仓库','测试' union all
select 1002,'Test','仓库','测试'
--------------开始查询--------------------------

select * from [A]
WHERE NOT EXISTS (SELECT 1 FROM  [B]  WHERE a.id=b.id AND A.NAME=b.NAME)
----------------结果----------------------------
/* 
ID          Name  Levels      Flag
----------- ----- ----------- -----------
1001        Gust  0           0
1001        Gust  1           1
1002        Admin 0           0
1003        Test  0           0
1004        Test  0           0
1005        Gust  0           0
1006        Gust  1           1
1007        Admin 0           0
1008        Test  0           0
*/


[解决办法]
if exists(select * from sysobjects where name = 'A')
drop table A
if exists(select * from sysobjects where name = 'B')
drop table B
go
create table A
(
ID varchar(10),
Name varchar(10),
Levels int,
Flag int
)
create table B
(
ID varchar(10),
Name varchar(10),
SavePlace varchar(10),
sort varchar(10)
)
go

insert into A values('1001','Test',0,0)
insert into A values('1002','Gust',0,0)
insert into A values('1003','Admin',0,0)

insert into B values('1001','Test','仓库','测试')
insert into B values('1002','Test','仓库','测试')
go

select * from A
select * from B

go
--不存在B表中的ID
select A.id from A WHERE id not in(select id from B)
--不存在B表中的Name
select A.Name from A WHERE Name not in(select Name from B)

go
--放在一起
select * from 
(select A.id from A WHERE id not in(select id from B))t1,
(select A.Name from A WHERE Name not in(select Name from B))t2
[解决办法]
SELECT A.* FROM A  WHERE NOT EXISTS(    SELECT 1 FROM B  WHERE B.ID=A.ID AND B.NAME=A.NAME) 

热点排行