求SQL语句:删除表A中与表B中相同数据

时间:2021-02-02 15:12:54
CREATE TABLE [dbo].[Sunny_oa_qjcc](
[编号] [varchar](16) NOT NULL,
[姓名] [varchar](32) NOT NULL,
[辅助类别] [varchar](16) NULL,
[请假类别] [varchar](16) NULL,
[请假日期] [datetime] NOT NULL,
[请假时段] [smallint] NOT NULL,
[开始时间] [datetime] NULL,
[结束时间] [datetime] NULL,
[请假小时] [real] NULL,
[请假理由] [varchar](128) NULL,
[请假全天] [bit] NULL,
[出差加班小时] [real] NULL,
[出差加班时段] [varchar](32) NULL,
[调休加班日期] [datetime] NULL,
[操作人] [varchar](32) NULL,
[审批人] [varchar](32) NULL,
[备注] [varchar](64) NULL,
[录入日期] [datetime] NULL
) ON [PRIMARY]

另一表名为leavae_data,结构完全相同.
现在想删除sunny_oa_qjcc中与leave_data中相同的数据.

13 个解决方案

#1


sunny_oa_qjcc中与leave_data中相同的数据.
是什么概念?是全部字段完全相同,还是部分字段组合相同?

#2


delete a from sunny_oa_qjcc a where exists(
select 1 from leave_data where 编号=a.编号 and 姓名=a.姓名 and ......)

#3


delete from sunny_oa_qjcc where exists(select 1 from leave_data where 编号leave_data.编号 and 请假日期leave_data.请假日期 and 请假时段leave_data.请假时段)

上面的写法对吗?怎么不是我要的结果啊

#4


i see,我好象写错了一些,马上试,谢谢! where后面要写多少条件啊

#5


引用 4 楼 h2osio2 的回复:
i see,我好象写错了一些,马上试,谢谢! where后面要写多少条件啊

全部字段啊

#6



--try
delete from sunny_oa_qjcc where checksum(*) not in(select checksum(*) from leave_data)

#7


天,怎么这样啊.谢谢了,再试

#8


你可以先查询该表,然后以文本形式显示,然后在复制列名 ,把你不要的给去掉,这样就避免了大段文字的输入
引用 7 楼 h2osio2 的回复:
天,怎么这样啊.谢谢了,再试

#9



checksum(...)

#10


引用 2 楼 qianjin036a 的回复:
SQL code

delete a from sunny_oa_qjcc a where a exists(
select 1 from leave_data where 编号=a.编号 and 姓名=a.姓名 and ......)

+1

#11


用的还是前面,保险,小F的还没试,不过非常感谢,那个checksum好新,我试了分享给大家

#12


delete a from sunny_oa_qjcc a    inner  join leave_data b
on a.编号=b.编号 and a.姓名=b.姓名 and ......

#13


有唯一主键的话就方便多了。。。。没有,只能悲剧了

#1


sunny_oa_qjcc中与leave_data中相同的数据.
是什么概念?是全部字段完全相同,还是部分字段组合相同?

#2


delete a from sunny_oa_qjcc a where exists(
select 1 from leave_data where 编号=a.编号 and 姓名=a.姓名 and ......)

#3


delete from sunny_oa_qjcc where exists(select 1 from leave_data where 编号leave_data.编号 and 请假日期leave_data.请假日期 and 请假时段leave_data.请假时段)

上面的写法对吗?怎么不是我要的结果啊

#4


i see,我好象写错了一些,马上试,谢谢! where后面要写多少条件啊

#5


引用 4 楼 h2osio2 的回复:
i see,我好象写错了一些,马上试,谢谢! where后面要写多少条件啊

全部字段啊

#6



--try
delete from sunny_oa_qjcc where checksum(*) not in(select checksum(*) from leave_data)

#7


天,怎么这样啊.谢谢了,再试

#8


你可以先查询该表,然后以文本形式显示,然后在复制列名 ,把你不要的给去掉,这样就避免了大段文字的输入
引用 7 楼 h2osio2 的回复:
天,怎么这样啊.谢谢了,再试

#9



checksum(...)

#10


引用 2 楼 qianjin036a 的回复:
SQL code

delete a from sunny_oa_qjcc a where a exists(
select 1 from leave_data where 编号=a.编号 and 姓名=a.姓名 and ......)

+1

#11


用的还是前面,保险,小F的还没试,不过非常感谢,那个checksum好新,我试了分享给大家

#12


delete a from sunny_oa_qjcc a    inner  join leave_data b
on a.编号=b.编号 and a.姓名=b.姓名 and ......

#13


有唯一主键的话就方便多了。。。。没有,只能悲剧了