SQL查询表中某一字段值而在另一个表字段中不存在的相关记录


  查询一个表中某一字段值而在另一个表字段中不存在的相关记录
 

(1)方法:select * from 【表A】 left join 【表B】 on 【表A字段】 = 【表B的字段】 where 【表A另一字段】 is null

 

(2)示例:

目前有一个用户的数据表,还有一个用户的角色表,但在用户的角色表中有一些垃圾数据。现在所要做的就是,把角色表里,凡是和用户无关的数据都查出来。

 

用户数据表UserInfo如下

 

GUID

UserInfoName

C7979466-97CC-4568-BC28-C74AF0E9DF2C

admin

9D659B19-5D11-4FED-A264-07403A01A592

佳佳原创

77F019CE-4C02-4310-A7AC-51FA2B178E3G

佳佳原创网站测试账号

FC84D97B-9E69-4567-B545-3256675CD29C

网站管理员

 

用户角色表UserRole如下

 

GUID

UserRoleUserName

UserRoleRoleID

UserRoleRoleName

BBB97841-208F-4852-8749-10C679B4972C

aaaa

ROLE001

角色分配

A088F0B0-1730-4470-A98E-22FE67DCE88D

佳佳原创网站测试账号

ROLE001

角色分配

0B414CB1-2B76-4582-BA53-2D975CBE0A2W

admin

ROLE001

角色分配

DC40703C-4CA7-46FB-9F43-B239C3862F5X

admin

ROLE002

信息发布

411A3A91-F9B9-40F1-B99E-B7FE37B9ACBQ

网站管理员

ROLE001

角色分配

C473CB75-B3BE-4D42-A9F5-C4150F7C38FB

aa

ROLE001

角色分配

AED16DB1-B876-43A8-9C37-CB6C296A6CBH

fasdfa

ROLE001

角色分配

 

由上表UserRole可以看出,UserRoleUserName字段中,aaaa 、aa和fasdfa,在用户信息表UserInfo中是没有的,属于垃圾数据,查出这些垃圾数据的sql语句为:

 

select UserRole.UserRoleId,UserRole.UserRoleUserName,UserRole.UserRoleRoleId,UserRole.UserRoleRoleNamefrom UserRole left join UserInfo on UserInfo.UserInfoName = UserRole.UserRoleUserName whereUserInfo.UserInfoName is null

 

查出的结果如下:

 

UserRoleId

UserRoleUserName

UserRoleRoleID

UserRoleRoleName

BBB97841-208F-4852-8749-10C679B4972A

aaaa

ROLE001

角色分配

C473CB75-B3BE-4D42-A9F5-C4150F7C38FC

aa

ROLE001

角色分配

AED16DB1-B876-43A8-9C37-CB6C296A6CB2

fasdfa

ROLE001

角色分配

 

  删除一个表中某一字段值而在另一个表字段中不存在的相关记录
(1)、方法:delete from 【要删除的表信息A】where 【筛选条件字段】 in  (select * from 【表A】 left join 【表B】on 【表A字段】 = 【表B的字段】 where 【表A另一字段】 is null)

(2)、示例:

如果要删除用户角色表UserRole中,字段UserRoleUserName中的用户信息,在用户表UserInfo中,字段UserInfoName中不存在的信息数据,SQL语句为:

 

delete from UserRole where UserRoleUserName in (select UserRoleUserName from UserRole left join UserInfoon UserInfo.UserInfoName = UserRole.UserRoleUserName where UserInfo.UserInfoName is null)