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)